Previous months’ reports




1. Summary

1.1 Summary table

A total of 533,200 persons have been reached by EiE activities in 2023, of which 277,605 were boys, 244,935 were girls, 5,058 were men and 5,602 were women. Below is a summary by indicator.


Summary statistics for EIE 5Ws reporting, 30 October 20233

Indicator

Partners1

Counties

October_reached

Total_reached

Target

%Target_reached

1. Access ECD spaces/schools

15

15

44,409

321,081

1,201,151

26.73

2. Feeding programmes

9

6

0

84,873

784,647

10.82

3. Teaching materials

13

13

20,687

232,361

600,578

38.69

4. Safe water, personal hygiene

7

6

0

41,723

784,647

5.32

5. Educators resilience enhancing

21

16

654

8,785

6,018

145.98

6. Children resilience enhancing

14

14

35,220

118,461

154,729

76.56

Total

40

20

80,283

533,2002

2,146,5452

24.84

1Only implementing partners

2Only the sum of indicators 1, 2, 5 and 6




1.2 By sex and age


Only Indicator 6, Children benefiting from resilience-enhancing programming, sees a higher proportion of females reached over men.





1.3 By county

45.57% of all beneficiaries reached originate from Turkana, though it only has 14.05% of the targeted population.


IPC data extracted from here.




2. Progress by indicator

2.1 Overall progress


The rate of increase in the number of beneficiaries reached has yet to plateau, with only indicators 2 and 6 seeing slight slowdowns in the number of beneficiaries reached each month.




2.2 Reached by indicator

2.2.1 Access to ECD spaces/schools


EiE Indicator 1, as of 30 October 20233

Indicator

Partners

Counties

October_reached

Total_reached

Target

%Target_reached

1. Access ECD spaces/schools

15

15

44,409

321,081

1,201,151

26.73



In October 2023, 44,409 persons were reached by interventions contributing to this indicator, of which 26,874 were boys and 17,535 were girls.





2.2.2 School feeding programmes


EiE Indicator 2, as of 30 October 20233

Indicator

Partners

Counties

October_reached

Total_reached

Target

%Target_reached

2. Feeding programmes

9

6

0

84,873

784,647

10.82



In October 2023, 0 persons were reached by interventions contributing to this indicator, of which 0 were boys and 0 were girls.





2.2.3 Teaching and learning materials


EiE Indicator 3, as of 30 October 20233

Indicator

Partners

Counties

October_reached

Total_reached

Target

%Target_reached

3. Teaching materials

13

13

20,687

232,361

600,578

38.69



In October 2023, 20,687 persons were reached by interventions contributing to this indicator, of which 12,453 were boys, 8,234 were girls, 0 were men and 0 were women.





2.2.4 Safe water, personal hygiene


EiE Indicator 4, as of 30 October 20233

Indicator

Partners

Counties

October_reached

Total_reached

Target

%Target_reached

4. Safe water, personal hygiene

7

6

0

41,723

784,647

5.32



In October 2023, 0 persons were reached by interventions contributing to this indicator, of which 0 were boys and 0 and were girls.





2.2.5 Educators trained in resilience enhancing programmes


EiE Indicator 5, as of 30 October 20233

Indicator

Partners

Counties

October_reached

Total_reached

Target

%Target_reached

5. Educators resilience enhancing

21

16

654

8,785

6,018

145.98



In October 2023, 654 persons were reached by interventions contributing to this indicator, of which 172 were men and 482 and were women.





2.2.6 Children benefited from resilience enhancing programmes


EiE Indicator 6, as of 30 October 20233

Indicator

Partners

Counties

October_reached

Total_reached

Target

%Target_reached

6. Children resilience enhancing

14

14

35,220

118,461

154,729

76.56



In October 2023, 35,220 persons were reached by interventions contributing to this indicator, of which 17,038 were boys and 18,182 and were girls





3. Partners

3.1 Operational presence of implementing partners



Below is an interactive table which adds detail to the map above, serving additional information for coordination – allowing interested parties to search by county or partner.

The column #Activities refers to the number of Education activities implemented by said partner in each county. Each column can be sorted with the arrows next to each column name. Each column can also be filtered by typing into the search bar below each column name. Only completed activities have been included.

Download the dataset from the table below here.





3.2 Summary by implementing partner

The table below breaks down persons reached by partner.


Summary by implementing partner

implementing_partner

reached1

counties

activities

%total2

Finn Church Aid

384,240

5

6

47.60

Windle International

57,273

1

3

7.09

Norwegian Refugee Council

52,914

2

3

6.55

Women Educational Researchers of Kenya

50,965

5

3

6.31

Food for the Hungry

46,419

2

6

5.75

Jesuit Refugee Service

33,605

1

3

4.16

Save the Children

32,790

4

3

4.06

World Vision Kenya

32,325

6

6

4.00

Lifeskills Promoters

29,786

3

4

3.69

Homa Bay County

23,166

1

1

2.87

We World

20,947

2

1

2.59

AVSI Foundation

9,768

2

3

1.21

Ministry of Education

8,241

1

2

1.02

Edukans

4,734

1

1

0.59

Action for Sustainable Change

4,160

1

3

0.52

Nawiri Children Development Program

3,487

1

2

0.43

Special Olympics Kenya

2,284

3

3

0.28

Mondi

2,197

1

1

0.27

Qatar Charity

1,541

1

1

0.19

The Girl Child Network

1,050

2

1

0.13

Frontiers Community Development Organization

1,044

1

1

0.13

Tana North and Tana Delta

882

1

1

0.11

Bartabwa

849

1

1

0.11

County Director of Education Mandera

600

1

2

0.07

Evangelizing Sisters of Mary

458

1

4

0.06

County Director of Education Wajir

361

1

2

0.04

MoE, KNATCOM, STEM Impact Centre

260

2

1

0.03

ERIKs Development Partner

249

1

1

0.03

Servants of the Poor

202

1

1

0.03

Dignitas

135

1

1

0.02

SMB

135

1

1

0.02

Missionary Sisters of the Catechism

85

1

1

0.01

MOE/TSC

60

1

1

0.01

Voluntary Service Overseas

42

1

1

0.01

Futebol da Forcaa

20

1

1

0.00

IWS

10

1

2

0.00

1All indicators as opposed only indicators 1, 2, 5 and 6

2Percentage of reached for all indicators




4. Schools and education level

4.1 Schools

The number of schools reached by school feeding programmes and WASH in schools interventions to-date are:



However, reporting the overall number of schools reached by all EiE interventions is much more challenging.

Whilst all partners working on indicators 2 and 4 submitted the number of schools they were working in, the same is not true for the other indicators. Only indicators 2 and 4 require the reporting of the number of schools.




5. Reference maps and tables

5.1 Reference maps

IPC data extracted from here.




5.2 Reference table

Download the EiE 5Ws data here

As a refresher for the reference table below, the indicators are:


indicator

indicator 1 # of children and youth accessing ECD spaces/schools in drought affected areas

indicator 2 # of schools/ECD spaces with feeding programmes

indicator 3 # of learners and teachers reached with learning and teaching materials

indicator 4 # of schools with adequate quantites of safe water for drinking and personal hygiene

indicator 5 # of teachers / educators trained on resilience enhancing programmes (MHPSS, DRR & Life Skills, etc)

indicator 6 # of children and youth benefiting from resilience enhancing programmes (MHPSS, DRR & Life Skills, etc)





LS0tDQp0aXRsZTogIktlbnlhIEVkdWNhdGlvbiBpbiBFbWVyZ2VuY2llcyBXb3JraW5nIEdyb3VwIC0tIERyb3VnaHQgNVdzIFJlcG9ydCINCmRhdGU6ICAiMzAgT2N0b2JlciAyMDIzIg0Kb3V0cHV0Og0KICBodG1sX2RvY3VtZW50Og0KICAgIGNvZGVfZG93bmxvYWQ6IHllcw0KICAgIHRoZW1lOiByZWFkYWJsZQ0KICAgIHRvYzogeWVzDQogICAgdG9jX2RlcHRoOiA0DQogICAgdG9jX2Zsb2F0OiB5ZXMNCiAgICBudW1iZXJfc2VjdGlvbnM6IG5vDQogICAgY29sbGFwc2VkOiBubw0KYWx3YXlzX2FsbG93X2h0bWw6IHllcw0KcGFyYW1zOiANCiAgcmVwb3J0X2RhdGU6ICIzMCBPY3RvYmVyIDIwMjMzIg0KICByZXBvcnRfbW9udGg6ICJPY3RvYmVyIg0KLS0tDQoNCmBgYHtjc3MsIGVjaG89RkFMU0V9DQoNCiNUT0M6OmJlZm9yZSB7DQogIGNvbnRlbnQ6ICIiOw0KICBkaXNwbGF5OiBibG9jazsNCiAgaGVpZ2h0OiA1MHB4Ow0KICBtYXJnaW46IDJlbSAyMHB4IDQwcHggMjBweDsNCiAgYmFja2dyb3VuZC1pbWFnZTogdXJsKCJodHRwczovL3Jhdy5naXRodWJ1c2VyY29udGVudC5jb20va2VueWEtZWllLXdnL2VpZV93Z181d3MvbWFpbi9laWVfd2dfbG9nby5wbmciKTsNCiAgYmFja2dyb3VuZC1zaXplOiBjb250YWluOw0KICBiYWNrZ3JvdW5kLXBvc2l0aW9uOiBjZW50ZXIgY2VudGVyOw0KICBiYWNrZ3JvdW5kLXJlcGVhdDogbm8tcmVwZWF0Ow0KfQ0KYGBgDQoNCmBgYHs9aHRtbH0NCjxzdHlsZT4NCiAgICBib2R5IC5tYWluLWNvbnRhaW5lciB7DQogICAgICAgIG1heC13aWR0aDogMTI4MHB4Ow0KICAgIH0NCjwvc3R5bGU+DQpgYGANCg0KDQoNCmBgYHtyIHNldHVwLCBpbmNsdWRlPUZBTFNFfQ0Ka25pdHI6Om9wdHNfY2h1bmskc2V0KGVjaG8gPSBGQUxTRSwgZmlnLndpZHRoPTksIG1lc3NhZ2UgPSBGQUxTRSwgd2FybmluZz1GQUxTRSkNCmxpYnJhcnkodGlkeXZlcnNlKQ0KbGlicmFyeShyZWFkeGwpDQpsaWJyYXJ5KGx1YnJpZGF0ZSkNCmxpYnJhcnkoc3RyaW5naSkNCmxpYnJhcnkoamFuaXRvcikNCmxpYnJhcnkoc2NhbGVzKQ0KbGlicmFyeSh2aXJpZGlzKQ0KbGlicmFyeShwYXRjaHdvcmspDQpsaWJyYXJ5KERUKQ0KbGlicmFyeShoZXJlKQ0KbGlicmFyeShzZikNCmxpYnJhcnkocGxvdGx5KQ0KbGlicmFyeShmbGV4dGFibGUpDQpsaWJyYXJ5KGdncmVwZWwpDQpsaWJyYXJ5KGFueXRpbWUpDQpsaWJyYXJ5KHRpZHl0ZXh0KQ0KbGlicmFyeShnZ3NmbGFiZWwpDQoNCnRoZW1lX3NldCh0aGVtZV9saWdodCgpKQ0KDQojIEluc3RhbGxhdGlvbiBvZiBtZGVwcml2IHBhY2thZ2UNCiMgaW5zdGFsbCBwYWNrYWdlIGRldnRvb2xzIGlmIG5vdCB5ZXQgaW5zdGFsbGVkDQojICAgaW5zdGFsbC5wYWNrYWdlcygiZGV2dG9vbHMiKQ0KDQojIGluc3RhbGwgZmFzdCBmcm9tIEdpdEh1YiB3aXRob3V0IHZpZ25ldHRlcyANCiMgICBkZXZ0b29sczo6aW5zdGFsbF9naXRodWIoImEtYmVuaW5pL21kZXByaXYiLCBidWlsZF92aWduZXR0ZXMgPSBGQUxTRQ0KDQojIEFsdGVybmF0aXZlbHksIGZvbGxvdyB0aGUgaW5zdHJ1Y3Rpb25zIGhlcmU6IGh0dHBzOi8vYS1iZW5pbmkuZ2l0aHViLmlvL21kZXByaXYvDQoNCiMgZGlzYWJsaW5nIHNjaWVudGlmaWMgbm90YXRpb24NCm9wdGlvbnMoc2NpcGVuID0gMTAwKQ0KDQpgJW91dCVgIDwtIE5lZ2F0ZShgJWluJWApDQoNCiMgZnVuY3Rpb24gZm9yIHRyYW5zcG9zaW5nIGRmDQp0cmFuc3Bvc2VfZGYgPC0gZnVuY3Rpb24oZGYpIHsNCiAgdF9kZiA8LSBkYXRhLnRhYmxlOjp0cmFuc3Bvc2UoZGYpDQogIGNvbG5hbWVzKHRfZGYpIDwtIHJvd25hbWVzKGRmKQ0KICByb3duYW1lcyh0X2RmKSA8LSBjb2xuYW1lcyhkZikNCiAgdF9kZiA8LSB0X2RmICU+JQ0KICAgIHRpYmJsZTo6cm93bmFtZXNfdG9fY29sdW1uKC5kYXRhID0gLikgJT4lDQogICAgdGliYmxlOjphc190aWJibGUoLikNCiAgcmV0dXJuKHRfZGYpDQp9DQoNCiMgc2NhbGluZyBmdW5jdGlvbnMgDQpyYW5nZTAxIDwtIGZ1bmN0aW9uKHgpeyh4LW1pbih4KSkvKG1heCh4KS1taW4oeCkpfQ0KcmFuZ2Vfd25hIDwtIGZ1bmN0aW9uKHgpeyh4LW1pbih4LCBuYS5ybSA9IFRSVUUpKS8obWF4KHgsIG5hLnJtID0gVFJVRSktbWluKHgsIG5hLnJtID0gVFJVRSkpfQ0KDQojIG1vZGUgZnVuY3Rpb24gDQptb2RlIDwtIGZ1bmN0aW9uKHgpIHsNCiAgdXggPC0gdW5pcXVlKHgpDQogIHV4W3doaWNoLm1heCh0YWJ1bGF0ZShtYXRjaCh4LCB1eCkpKV0NCn0NCg0KIyBGaXhpbmcgZGF0ZXMNCm5hbWVfdG9fZGF0ZSA8LSBmdW5jdGlvbih4KSB7DQogIGx1YnJpZGF0ZTo6bWR5KGlmZWxzZSh4ICVpbiUgYyhtb250aC5uYW1lLCBtb250aC5hYmIpLCBwYXN0ZTAoeCwgIi8wMS8yMDIzIiksIHgpKQ0KfQ0KYGBgDQoNCg0KDQoNCmBgYHtyIGRhdGF9DQojIFJ1biB0aGlzIGlmIHlvdSBuZWVkIHRvDQojIHJtYXJrZG93bjo6cmVuZGVyKGlucHV0ID0gIjVXc19jbGVhbmluZ19zY3JpcHQuUm1kIikNCg0KbG9jYXRpb25zIDwtIHJlYWRfeGxzeCgiLi9kYXRhL2tlbl9hZG1pbmJvdW5kYXJpZXNfdGFidWxhcmRhdGEueGxzeCIsIA0KICAgICAgICAgICAgICAgICAgICAgIHNoZWV0ID0gIkFETTIiKSAlPiUgDQogIGNsZWFuX25hbWVzKCkNCg0Kc2l0cmVwX3RhYmxlIDwtIHJlYWRfeGxzeCgiLi9kYXRhL3NpdHJlcF9yZXN1bHRzX3RhYmxlLnhsc3giKSAlPiUgDQogIGNsZWFuX25hbWVzKCkNCg0KdGFyZ2V0cyA8LSByZWFkX2NzdigiLi9kYXRhL2VpZV90YXJnZXRzLmNzdiIpDQoNCnBjb2RlMV9zaGFwZSA8LSANCiAgc2Y6OnN0X3JlYWQoIi4vZGF0YS9rZW5fYWRtX2llYmNfMjAxOTEwMzFfc2hwL2tlbl9hZG1ibmRhX2FkbTFfaWViY18yMDE5MTAzMS5zaHAiLCANCiAgICAgICAgICBxdWlldCA9IFRSVUUpICU+JSANCiAgY2xlYW5fbmFtZXMoKQ0KDQppcGMgPC0gcmVhZF9jc3YoIi4vZGF0YS9pcGMuY3N2IikNCg0KcGFydG5lcl9saXN0X2NvdW50aWVzIDwtIHJlYWRfY3N2KCIuL2RhdGEvcGFydG5lcl9saXN0X2NvdW50aWVzLmNzdiIpICU+JSANCiAgZmlsdGVyKHBhcnRuZXJfdHlwZSA9PSAiaW1wbGVtZW50aW5nX3BhcnRuZXIiKQ0KDQplaWUgPC0gcmVhZF9jc3YoIi4vZGF0YS9laWVfNXdzLmNzdiIpICU+JSANCiAgZmlsdGVyKCFpcy5uYShpbmRpY2F0b3Jfc2hvcnQpKSAlPiUgDQogIHJlcGxhY2VfbmEobGlzdChib3lzID0gMCwgZ2lybHMgPSAwLCBtZW4gPSAwLCB3b21lbiA9IDApKSAlPiUgDQogICMgVG90YWwgcmVhY2hlZCBvZiBpbmRpY2F0b3IgMSBpcyBvbmx5IGJveXMgYW5kIGdpcmxzIA0KICBtdXRhdGUodG90YWxfcmVhY2hlZCA9IGNhc2Vfd2hlbihzdHJfZGV0ZWN0KGluZGljYXRvciwgIjEiKSB+IGJveXMgKyBnaXJscywgDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cl9kZXRlY3QoaW5kaWNhdG9yLCAiNSIpIH4gbWVuICsgd29tZW4sIA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJfZGV0ZWN0KGluZGljYXRvciwgIjYiKSB+IGJveXMgKyBnaXJscywgDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRSVUUgfiB0b3RhbF9yZWFjaGVkKSkNCmBgYA0KDQoNCg0KDQpbUHJldmlvdXMgbW9udGhzJyByZXBvcnRzXShsYW5kaW5nX3BhZ2UuaHRtbCkgDQoNCjxicj48YnI+PGJyPg0KDQojIDEuIFN1bW1hcnkNCg0KIyMgMS4xIFN1bW1hcnkgdGFibGUNCg0KYGBge3J9DQpzdW1fc3RhdHMgPC0gZWllICU+JSAgDQogIHN1bW1hcmlzZShwYXJ0bmVycyA9IG5fZGlzdGluY3QoaW1wbGVtZW50aW5nX3BhcnRuZXIpLCANCiAgICAgICAgICAgIGNvdW50aWVzID0gbl9kaXN0aW5jdChjb3VudHkpLCANCiAgICAgICAgICAgIHJlYWNoZWQgPSBzdW0oc2VjdG9yX3JlYWNoZWQsIG5hLnJtID0gVFJVRSksIA0KICAgICAgICAgICAgbWVuID0gc3VtKG1lbltzdHJfZGV0ZWN0KGluZGljYXRvcl9zaG9ydCwgIjJ8NSIpICYgDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgYWN0aXZpdHlfc3RhdHVzID09ICJDb21wbGV0ZWQiXSwgbmEucm0gPSBUUlVFKSwgDQogICAgICAgICAgICB3b21lbiA9IHN1bSh3b21lbltzdHJfZGV0ZWN0KGluZGljYXRvcl9zaG9ydCwgIjJ8NSIpICYNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWN0aXZpdHlfc3RhdHVzID09ICJDb21wbGV0ZWQiXSwgbmEucm0gPSBUUlVFKSwgDQogICAgICAgICAgICBib3lzID0gc3VtKGJveXNbc3RyX2RldGVjdChpbmRpY2F0b3Jfc2hvcnQsICIxfDJ8NiIpICYNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFjdGl2aXR5X3N0YXR1cyA9PSAiQ29tcGxldGVkIl0sIG5hLnJtID0gVFJVRSksIA0KICAgICAgICAgICAgZ2lybHMgPSBzdW0oZ2lybHNbc3RyX2RldGVjdChpbmRpY2F0b3Jfc2hvcnQsICIxfDJ8NiIpICYgDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFjdGl2aXR5X3N0YXR1cyA9PSAiQ29tcGxldGVkIl0sIG5hLnJtID0gVFJVRSksIA0KICAgICAgICAgICAgcmVhY2hlZF8xMjU2ID0gc3VtKHRvdGFsX3JlYWNoZWRbc3RyX2RldGVjdChpbmRpY2F0b3Jfc2hvcnQsICIxfDJ8NXw2IikgJiANCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWN0aXZpdHlfc3RhdHVzID09ICJDb21wbGV0ZWQiXSwgbmEucm0gPSBUUlVFKSwgDQogICAgICAgICAgICBsYXRlc3RfcmVhY2hlZCA9IHN1bSh0b3RhbF9yZWFjaGVkW3N0cl9kZXRlY3QoaW5kaWNhdG9yX3Nob3J0LCAiMXwyfDV8NiIpICYgDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFjdGl2aXR5X3N0YXR1cyA9PSAiQ29tcGxldGVkIiYgDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbW9udGggJWluJSBwYXJhbXMkcmVwb3J0X21vbnRoXSwgDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuYS5ybSA9IFRSVUUpKQ0KDQoNCg0KYGBgDQoNCkEgdG90YWwgb2YgYHIgc3VtX3N0YXRzICU+JSBwdWxsKHJlYWNoZWRfMTI1NikgJT4lIGZvcm1hdChiaWcubWFyayA9ICIsIilgIHBlcnNvbnMgaGF2ZSBiZWVuIHJlYWNoZWQgYnkgRWlFIGFjdGl2aXRpZXMgaW4gMjAyMywgb2Ygd2hpY2ggYHIgc3VtX3N0YXRzICU+JSBwdWxsKGJveXMpICU+JSBmb3JtYXQoYmlnLm1hcmsgPSAiLCIpYCB3ZXJlIGJveXMsIGByIHN1bV9zdGF0cyAlPiUgcHVsbChnaXJscykgJT4lIGZvcm1hdChiaWcubWFyayA9ICIsIilgIHdlcmUgZ2lybHMsIGByIHN1bV9zdGF0cyAlPiUgcHVsbChtZW4pICU+JSBmb3JtYXQoYmlnLm1hcmsgPSAiLCIpYCB3ZXJlIG1lbiBhbmQgYHIgc3VtX3N0YXRzICU+JSBwdWxsKHdvbWVuKSAlPiUgZm9ybWF0KGJpZy5tYXJrID0gIiwiKWAgd2VyZSB3b21lbi4gQmVsb3cgaXMgYSBzdW1tYXJ5IGJ5IGluZGljYXRvci4gDQoNCg0KDQo8YnI+DQoNCg0KYGBge3J9DQoNCg0Kc3VtbWFyeV90YWJsZSA8LSBlaWUgJT4lIA0KICBmaWx0ZXIoYWN0aXZpdHlfc3RhdHVzID09ICJDb21wbGV0ZWQiKSAlPiUgDQogIG11dGF0ZShsYXRlc3RfcmVhY2hlZCA9IGlmZWxzZShtb250aCAlaW4lIHBhcmFtcyRyZXBvcnRfbW9udGgsIHRvdGFsX3JlYWNoZWQsIE5BX2ludGVnZXJfKSkgJT4lIA0KICBncm91cF9ieShpbmRpY2F0b3Jfc2hvcnQpICU+JSANCiAgc3VtbWFyaXNlKHBhcnRuZXJzID0gbl9kaXN0aW5jdChpbXBsZW1lbnRpbmdfcGFydG5lciksIA0KICAgICAgICAgICAgY291bnRpZXMgPSBuX2Rpc3RpbmN0KGFkbTFfcGNvZGUpLCAgIA0KICAgICAgICAgICAgbGF0ZXN0X3JlYWNoZWQgPSBzdW0obGF0ZXN0X3JlYWNoZWQsIG5hLnJtID0gVFJVRSksIA0KICAgICAgICAgICAgdG90YWxfcmVhY2hlZCA9IHN1bSh0b3RhbF9yZWFjaGVkLCBuYS5ybSA9IFRSVUUpKSAlPiUgDQogIGFkb3JuX3RvdGFscygicm93IiwsLCwgbGF0ZXN0X3JlYWNoZWQsIHRvdGFsX3JlYWNoZWQpICU+JSANCiAgbXV0YXRlKHBhcnRuZXJzID0gaWZlbHNlKGluZGljYXRvcl9zaG9ydCA9PSAiVG90YWwiLCBzdW1fc3RhdHMkcGFydG5lcnMsIHBhcnRuZXJzKSwgDQogICAgICAgICBjb3VudGllcyA9IGlmZWxzZShpbmRpY2F0b3Jfc2hvcnQgPT0gIlRvdGFsIiwgc3VtX3N0YXRzJGNvdW50aWVzLCBjb3VudGllcyksIA0KICAgICAgICAgdG90YWxfcmVhY2hlZCA9IGlmZWxzZShpbmRpY2F0b3Jfc2hvcnQgPT0gIlRvdGFsIiwgDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN1bV9zdGF0cyRyZWFjaGVkXzEyNTYsIA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0b3RhbF9yZWFjaGVkKSwgDQogICAgICAgICBsYXRlc3RfcmVhY2hlZCA9IGlmZWxzZShpbmRpY2F0b3Jfc2hvcnQgPT0gIlRvdGFsIiwgDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdW1fc3RhdHMkbGF0ZXN0X3JlYWNoZWQsIA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGF0ZXN0X3JlYWNoZWQpKSAlPiUgDQogIGxlZnRfam9pbih0YXJnZXRzICU+JSANCiAgICAgICAgICAgICAgZmlsdGVyKHRhcmdldF91bml0ID09ICJwZW9wbGUiKSAlPiUNCiAgICAgICAgICAgICAgZ3JvdXBfYnkoaW5kaWNhdG9yX3Nob3J0KSAlPiUNCiAgICAgICAgICAgICAgc3VtbWFyaXNlKHRhcmdldCA9IHN1bShjb3VudHlfdGFyZ2V0KSksIA0KICAgICAgICAgICAgYnkgPSAiaW5kaWNhdG9yX3Nob3J0IikgJT4lIA0KICBtdXRhdGUodGFyZ2V0ID0gaWZlbHNlKGluZGljYXRvcl9zaG9ydCA9PSAiVG90YWwiLCANCiAgICAgICAgICAgICAgICAgICAgICAgICB0YXJnZXRzICU+JSBkaXN0aW5jdChjb3VudHksIGNvdW50eV9vdmVyYWxsX3RhcmdldCkgJT4lIHtzdW0oLiRjb3VudHlfb3ZlcmFsbF90YXJnZXQpfSwgDQogICAgICAgICAgICAgICAgICAgICAgICAgdGFyZ2V0KSkgJT4lIA0KICBtdXRhdGUocGMgPSByb3VuZCh0b3RhbF9yZWFjaGVkIC8gdGFyZ2V0ICogMTAwLCBkaWdpdHMgPSAyKSkgJT4lDQogIHNlbGVjdChpbmRpY2F0b3IgPSBpbmRpY2F0b3Jfc2hvcnQsIHBhcnRuZXJzLCBjb3VudGllcywgDQogICAgICAgICBsYXRlc3RfcmVhY2hlZCwgdG90YWxfcmVhY2hlZCwgdGFyZ2V0LCBgJXRhcmdldF9yZWFjaGVkYCA9IHBjKSAlPiUNCiAgc2VsZWN0X2FsbCh+IGdzdWIoImxhdGVzdCIsIA0KICAgICAgICAgICAgICAgICAgICBwYXJhbXMkcmVwb3J0X21vbnRoLCAuKSkgJT4lDQogIHNlbGVjdF9hbGwofiBzdHJfdG9fdGl0bGUoLikpICANCg0Kc3VtbWFyeV90YWJsZSAlPiUgDQogIGZsZXh0YWJsZSgpICU+JSANCiAgdGhlbWVfemVicmEoKSAlPiUgDQogIHNldF9jYXB0aW9uKHBhc3RlMCgiU3VtbWFyeSBzdGF0aXN0aWNzIGZvciBFSUUgNVdzIHJlcG9ydGluZywgIiwgcGFyYW1zJHJlcG9ydF9kYXRlKSkgJT4lIA0KICBzZXRfdGFibGVfcHJvcGVydGllcyhsYXlvdXQgPSAiYXV0b2ZpdCIsIHdpZHRoID0gLjk5KSAlPiUgDQogIGZvbnRzaXplKGkgPSAxOjYsIGogPSAxLCBzaXplID0gOSkgJT4lIA0KICBmb250c2l6ZShzaXplID0gOSwgcGFydCA9ICJoZWFkZXIiKSAlPiUgDQogIGZvb3Rub3RlKGkgPSAxLCBqID0gMiwgcGFydCA9ICJoZWFkZXIiLCByZWZfc3ltYm9scyA9ICIxIiwgDQogICAgICAgICAgIGFzX3BhcmFncmFwaCgiT25seSBpbXBsZW1lbnRpbmcgcGFydG5lcnMiKSkgJT4lIA0KICBmb290bm90ZShpID0gNywgaiA9IDU6NiwgcmVmX3N5bWJvbHMgPSAiMiIsIA0KICAgICAgICAgICBhc19wYXJhZ3JhcGgoIk9ubHkgdGhlIHN1bSBvZiBpbmRpY2F0b3JzIDEsIDIsIDUgYW5kIDYiKSkNCg0KICANCmBgYA0KDQo8YnI+PGJyPjxicj4NCg0KDQojIyAxLjIgQnkgc2V4IGFuZCBhZ2UNCg0KYGBge3J9DQplaWUgJT4lIA0KICBtdXRhdGUoaW5kaWNhdG9yX3Nob3J0ID0gZmN0X3JldihpbmRpY2F0b3Jfc2hvcnQpKSAlPiUNCiAgbXV0YXRlX2F0KHZhcnMoYm95cywgZ2lybHMsIG1lbiwgd29tZW4pLCB+IHJlcGxhY2VfbmEoLiwgMCkpICU+JSANCiAgbXV0YXRlX2F0KHZhcnMobWVuLCB3b21lbiksIH4gaWZlbHNlKHN0cl9kZXRlY3QoaW5kaWNhdG9yLCAiMSIpLCAwLCAuKSkgJT4lIA0KICBncm91cF9ieShpbmRpY2F0b3Jfc2hvcnQpICU+JSANCiAgc3VtbWFyaXNlX2F0KHZhcnMoYm95cywgZ2lybHMsIG1lbiwgd29tZW4pLCB+IHN1bSguLCBuYS5ybSA9IFRSVUUpKSAlPiUgDQogIG11dGF0ZSh0b3RhbF9yZWFjaGVkID0gYm95cyArIGdpcmxzICsgbWVuICsgd29tZW4sIA0KICAgICAgICAgZmVtYWxlID0gKHdvbWVuICsgZ2lybHMpIC8gdG90YWxfcmVhY2hlZCwgDQogICAgICAgICBtYWxlID0gKGJveXMgKyBtZW4pIC8gdG90YWxfcmVhY2hlZCkgJT4lDQogIHBpdm90X2xvbmdlcihjb2xzID0gYyhmZW1hbGUsIG1hbGUpLCANCiAgICAgICAgICAgICAgIG5hbWVzX3RvID0gInNleCIsIA0KICAgICAgICAgICAgICAgdmFsdWVzX3RvID0gInBjIikgJT4lIA0KICBnZ3Bsb3QoYWVzKHggPSBwYywgeSA9IGluZGljYXRvcl9zaG9ydCwgZmlsbCA9IHNleCkpICsgDQogIGdlb21fY29sKCkgKyANCiAgZ2VvbV90ZXh0KGFlcyh4ID0gcGMsIA0KICAgICAgICAgICAgICAgIHkgPSBpbmRpY2F0b3Jfc2hvcnQsIA0KICAgICAgICAgICAgICAgIGxhYmVsID0gcGVyY2VudChwYywgYWNjdXJhY3kgPSAxKSksDQogICAgICAgICAgICBwb3NpdGlvbiA9IHBvc2l0aW9uX3N0YWNrKHZqdXN0ID0gLjUpLCANCiAgICAgICAgICAgIGNvbG91ciA9ICJ3aGl0ZSIpICsNCiAgc2NhbGVfZmlsbF9tYW51YWwodmFsdWVzID0gYygiIzQ0Mzk4MyIsICIjMzViNzc5IikpICsNCiAgc2NhbGVfeF9jb250aW51b3VzKGxhYmVscyA9IHBlcmNlbnQpICsgDQogIGxhYnMoeCA9ICIiLCANCiAgICAgICB5ID0gIiIsIA0KICAgICAgIHRpdGxlID0gIlNleCBicmVha2Rvd24gYnkgaW5kaWNhdG9yIikgIA0KDQpgYGANCg0KPGJyPg0KDQpPbmx5IEluZGljYXRvciA2LCBDaGlsZHJlbiBiZW5lZml0aW5nIGZyb20gcmVzaWxpZW5jZS1lbmhhbmNpbmcgcHJvZ3JhbW1pbmcsIHNlZXMgYSBoaWdoZXIgcHJvcG9ydGlvbiBvZiBmZW1hbGVzIHJlYWNoZWQgb3ZlciBtZW4uIA0KDQo8YnI+DQoNCmBgYHtyIGZpZy5oZWlnaHQ9Nn0NCmVpZSAlPiUgDQogIGZpbHRlcihhY3Rpdml0eV9zdGF0dXMgPT0gIkNvbXBsZXRlZCIpICU+JSANCiAgbXV0YXRlX2F0KHZhcnMoYm95cywgZ2lybHMsIG1lbiwgd29tZW4pLCB+IHJlcGxhY2VfbmEoLiwgMCkpICU+JQ0KICBncm91cF9ieShpbmRpY2F0b3Jfc2hvcnQpICU+JSANCiAgc3VtbWFyaXNlX2F0KHZhcnMobWVuLCB3b21lbiwgYm95cywgZ2lybHMpLCB+IHN1bSguKSkgJT4lIA0KICBmaWx0ZXIoIWlzLm5hKGluZGljYXRvcl9zaG9ydCkpICU+JSANCiAgcGl2b3RfbG9uZ2VyKGNvbHMgPSBjKG1lbiwgd29tZW4sIGJveXMsIGdpcmxzKSwgDQogICAgICAgICAgICAgICBuYW1lc190byA9ICJ0eXBlIiwgDQogICAgICAgICAgICAgICB2YWx1ZXNfdG8gPSAicmVhY2hlZCIpICU+JSANCiAgbXV0YXRlKHR5cGUgPSBzdHJfdG9fdGl0bGUodHlwZSksIA0KICAgICAgICAgdHlwZSA9IGZjdF9yZWxldmVsKHR5cGUsIGMoIk1lbiIsICJXb21lbiIsICJCb3lzIiwgIkdpcmxzIikpKSAlPiUgDQogICMgWW91J3JlIGp1c3QgZmlsdGVyaW5nIHRoZW0gb3V0IG1hbnVhbGx5DQogIG11dGF0ZShyZWFjaGVkID0gY2FzZV93aGVuKA0KICAgIHN0cl9kZXRlY3QoaW5kaWNhdG9yX3Nob3J0LCAiNSIpICYgdHlwZSA9PSAiQm95cyIgfiAwLCANCiAgICBzdHJfZGV0ZWN0KGluZGljYXRvcl9zaG9ydCwgIjUiKSAmIHR5cGUgPT0gIkdpcmxzIiB+IDAsIA0KICAgIHN0cl9kZXRlY3QoaW5kaWNhdG9yX3Nob3J0LCAiNiIpICYgdHlwZSA9PSAiTWVuIiB+IDAsIA0KICAgIHN0cl9kZXRlY3QoaW5kaWNhdG9yX3Nob3J0LCAiNiIpICYgdHlwZSA9PSAiV29tZW4iIH4gMCwgDQogICAgc3RyX2RldGVjdChpbmRpY2F0b3Jfc2hvcnQsICIxIikgJiB0eXBlID09ICJNZW4iIH4gMCwgDQogICAgc3RyX2RldGVjdChpbmRpY2F0b3Jfc2hvcnQsICIxIikgJiB0eXBlID09ICJXb21lbiIgfiAwLA0KICAgIFRSVUUgfiByZWFjaGVkDQogICkpICU+JSANCiAgZ2dwbG90KGFlcyh5ID0gdHlwZSwgeCA9IHJlYWNoZWQsIGZpbGwgPSB0eXBlKSkgKyANCiAgZ2VvbV9jb2woKSArIA0KICBnZW9tX3RleHQoYWVzKGxhYmVsID0gY29tbWEocmVhY2hlZCkpLCANCiAgICAgICAgICAgIGhqdXN0ID0gImlud2FyZCIpICsNCiAgdGhlbWUobGVnZW5kLnBvc2l0aW9uID0gIm5vbmUiLA0KICAgICAgICBzdHJpcC50ZXh0ID0gZWxlbWVudF90ZXh0KHNpemUgPSA4LCBmYWNlID0gImJvbGQiKSwNCiAgICAgICAgc3RyaXAuYmFja2dyb3VuZCA9IGVsZW1lbnRfcmVjdChmaWxsID0gIiMyMTIxMjEiKSwgDQogICAgICAgIHBsb3QudGl0bGUgPSBlbGVtZW50X3RleHQoc2l6ZSA9IDEyKSkgKw0KICBzY2FsZV94X2NvbnRpbnVvdXMobGFiZWxzID0gbnVtYmVyX2Zvcm1hdChzY2FsZSA9IDEgLyAxMDAwLCBzdWZmaXggPSAiSyIpKSArDQogIHNjYWxlX2ZpbGxfdmlyaWRpc19kKGJlZ2luID0gLjIsIGVuZCA9IC45KSArIA0KICBmYWNldF93cmFwKH4gaW5kaWNhdG9yX3Nob3J0LCBzY2FsZXMgPSAiZnJlZV94IikgKyANCiAgbGFicyh4ID0gIlBlcnNvbnMgcmVhY2hlZCIsIA0KICAgICAgIHkgPSAiIiwgDQogICAgICAgdGl0bGUgPSAiUmVhY2ggZGlzYWdncmVnYXRlZCBieSBzZXgsIGFnZSBhbmQgaW5kaWNhdG9yIikNCg0KDQpgYGANCg0KDQoNCjxicj48YnI+PGJyPg0KDQoNCiMjIDEuMyBCeSBjb3VudHkNCg0KYGBge3J9DQpjdW1fcGM8LSBlaWUgJT4lIA0KICBmaWx0ZXIoYWN0aXZpdHlfc3RhdHVzID09ICJDb21wbGV0ZWQiKSAlPiUgDQogIGdyb3VwX2J5KGNvdW50eSkgJT4lIA0KICBzdW1tYXJpc2UoYmVuZWZpY2lhcmllcyA9IHN1bShzZWN0b3JfcmVhY2hlZCwgbmEucm0gPSBUUlVFKSkgJT4lIA0KICBsZWZ0X2pvaW4odGFyZ2V0cyAlPiUgDQogICAgICAgICAgICAgIGRpc3RpbmN0KGNvdW50eSwgdGFyZ2V0ID0gY291bnR5X292ZXJhbGxfdGFyZ2V0KSwgDQogICAgICAgICAgICBieSA9ICJjb3VudHkiKSAlPiUgDQogIHJlcGxhY2VfbmEobGlzdCh0YXJnZXQgPSAwKSkgJT4lIA0KICBtdXRhdGUocGNfYmVuID0gcm91bmQoYmVuZWZpY2lhcmllcyAvIHN1bShiZW5lZmljaWFyaWVzKSAqIDEwMCwgZGlnaXRzID0gMiksIA0KICAgICAgICAgcGNfdGFyZ2V0ID0gcm91bmQodGFyZ2V0IC8gc3VtKHRhcmdldCkgKiAxMDAsIGRpZ2l0cyA9IDIpKSAlPiUgDQogIGFycmFuZ2UoZGVzYyhiZW5lZmljaWFyaWVzKSkgJT4lIA0KICBtdXRhdGUoY3VtX3BjID0gY3Vtc3VtKHBjX2JlbikpDQpgYGANCg0KYHIgY3VtX3BjICU+JSBmaWx0ZXIoY291bnR5ID09ICJUdXJrYW5hIikgJT4lIHB1bGwoY3VtX3BjKWAlIG9mIGFsbCBiZW5lZmljaWFyaWVzIHJlYWNoZWQgb3JpZ2luYXRlIGZyb20gVHVya2FuYSwgdGhvdWdoIGl0IG9ubHkgaGFzIGByIGN1bV9wYyAlPiUgZmlsdGVyKGNvdW50eSA9PSAiVHVya2FuYSIpICU+JSBwdWxsKHBjX3RhcmdldClgJSBvZiB0aGUgdGFyZ2V0ZWQgcG9wdWxhdGlvbi4gDQoNCjxicj4NCg0KYGBge3J9DQoNCmVpZSAlPiUgDQogIGdyb3VwX2J5KGFkbTFfcGNvZGUsIGNvdW50eSkgJT4lIA0KICBzdW1tYXJpc2Uoc2VjdG9yX3JlYWNoZWQgPSBzdW0oc2VjdG9yX3JlYWNoZWQsIG5hLnJtID0gVFJVRSksIA0KICAgICAgICAgICAgLmdyb3VwcyA9ICJkcm9wIikgJT4lIA0KICBsZWZ0X2pvaW4odGFyZ2V0cyAlPiUgDQogICAgICAgICAgICAgIGRpc3RpbmN0KGNvdW50eSwgdGFyZ2V0ID0gY291bnR5X292ZXJhbGxfdGFyZ2V0KSwgDQogICAgICAgICAgICBieSA9ICJjb3VudHkiKSAlPiUgIA0KICBtdXRhdGUoY291bnR5ID0gZmN0X3Jlb3JkZXIoY291bnR5LCBzZWN0b3JfcmVhY2hlZCkpICU+JSANCiAgZmlsdGVyKHNlY3Rvcl9yZWFjaGVkID4gMCB8IHRhcmdldCA+IDApICU+JSANCiAgbGVmdF9qb2luKGlwYyAlPiUgDQogICAgICAgICAgICAgIHNlbGVjdChhZG0xX3Bjb2RlLCBwZXJjZW50X3BoYXNlX3AzKSwgDQogICAgICAgICAgICBieSA9ICJhZG0xX3Bjb2RlIikgJT4lIA0KICBwaXZvdF9sb25nZXIoY29scyA9IGMoc2VjdG9yX3JlYWNoZWQsIHRhcmdldCksIA0KICAgICAgICAgICAgICAgbmFtZXNfdG8gPSAidHlwZSIsIA0KICAgICAgICAgICAgICAgdmFsdWVzX3RvID0gInZhbHVlIikgJT4lIA0KICBtdXRhdGUodHlwZSA9IGlmZWxzZSh0eXBlID09ICJ0YXJnZXQiLCAiQ291bnR5IFRhcmdldCIsICJTZWN0b3IgUmVhY2hlZCIpKSAlPiUgDQogIHJlcGxhY2VfbmEobGlzdCh2YWx1ZSA9IDApKSAlPiUNCiAgZ2dwbG90KGFlcyh4ID0gdmFsdWUsIA0KICAgICAgICAgICAgIHkgPSBjb3VudHksIA0KICAgICAgICAgICAgIGZpbGwgPSBwZXJjZW50X3BoYXNlX3AzKSkgKyANCiAgZ2VvbV9jb2woKSArIA0KICBnZW9tX3RleHQoYWVzKGxhYmVsID0gY29tbWEodmFsdWUpKSwgaGp1c3QgPSAiaW53YXJkIikgKw0KICBzY2FsZV94X2NvbnRpbnVvdXMobGFiZWxzID0gbnVtYmVyX2Zvcm1hdChzY2FsZSA9IDEvMTAwMCwgc3VmZml4ID0gIksiKSkgKw0KICBzY2FsZV9maWxsX3ZpcmlkaXMob3B0aW9uID0gImluZmVybm8iLCBiZWdpbiA9IC40LCAsIGRpcmVjdGlvbiA9IC0xLCANCiAgICAgICAgICAgICAgICAgICAgIGxhYmVscyA9IHBlcmNlbnQpICsgDQogIGZhY2V0X2dyaWQofiB0eXBlLCBzY2FsZXMgPSAiZnJlZV94Iiwgc3BhY2UgPSAiZnJlZSIpICsgDQogIGxhYnMoZmlsbCA9ICIlIElQQzMrIiwNCiAgICAgICB4ID0gIlRhcmdldC9yZWFjaGVkIiwgDQogICAgICAgeSA9ICIiLCANCiAgICAgICBjYXB0aW9uID0gIkNvbG91cnMgcmVmZXIgdG8gJSBvZiBjb3VudHkgcG9wdWxhdGlvbiBpbiBJUEMgcGhhc2UgMyBvciBhYm92ZS4gSG9tYSBCYXkgd2FzIG5vdCBhc3Nlc3NlZCBhcyBwYXJ0IG9mIHRoZSBJUEMgQ2xhc3NpZmljYXRpb24iLCANCiAgICAgICB0aXRsZSA9ICJDb21wYXJpc29uIGJldHdlZW4gdGFyZ2V0cyBhbmQgcmVhY2hlZCIpICsNCiAgdGhlbWUoIyBheGlzLnRleHQueCA9IGVsZW1lbnRfdGV4dChzaXplID0gNSwgYW5nbGUgPSA2MCwgaGp1c3QgPSAxLCB2anVzdCA9IDEpLCANCiAgICAgICAgIyBheGlzLnRleHQueSA9IGVsZW1lbnRfdGV4dChzaXplID0gNSksIA0KICAgICAgICBzdHJpcC50ZXh0ID0gZWxlbWVudF90ZXh0KHNpemUgPSA4LCBmYWNlID0gImJvbGQiKSwNCiAgICAgICAgc3RyaXAuYmFja2dyb3VuZCA9IGVsZW1lbnRfcmVjdChmaWxsID0gIiMyMTIxMjEiKSwgDQogICAgICAgIHBsb3QuY2FwdGlvbiA9IGVsZW1lbnRfdGV4dChoanVzdCA9IC41KSkNCmBgYA0KDQpJUEMgZGF0YSBleHRyYWN0ZWQgZnJvbSBbaGVyZV0oaHR0cHM6Ly93d3cuaXBjaW5mby5vcmcvaXBjLWNvdW50cnktYW5hbHlzaXMvZGV0YWlscy1tYXAvZW4vYy8xMTU2MjEwLz9pc28zPUtFTikuDQoNCjxicj48YnI+PGJyPg0KDQoNCg0KIyAyLiBQcm9ncmVzcyBieSBpbmRpY2F0b3INCg0KIyMgMi4xIE92ZXJhbGwgcHJvZ3Jlc3MNCg0KDQoNCmBgYHtyIGZpZy5oZWlnaHQ9Nn0NCg0KbGluZV92YWx1ZXMgPC0gZWllICU+JSANCiAgZmlsdGVyKGFjdGl2aXR5X3N0YXR1cyA9PSAiQ29tcGxldGVkIikgJT4lIA0KICBncm91cF9ieShpbmRpY2F0b3Jfc2hvcnQpICU+JSANCiAgc3VtbWFyaXNlKGJlbmVmaWNpYXJpZXMgPSBzdW0odG90YWxfcmVhY2hlZCwgbmEucm0gPSBUUlVFKSkNCg0KDQplaWUgJT4lIA0KICBmaWx0ZXIoYWN0aXZpdHlfc3RhdHVzID09ICJDb21wbGV0ZWQiKSAlPiUgDQogIG11dGF0ZShkYXRlID0gbmFtZV90b19kYXRlKG1vbnRoKSkgJT4lIA0KICBncm91cF9ieShkYXRlLCBpbmRpY2F0b3Jfc2hvcnQpICU+JSANCiAgc3VtbWFyaXNlKGJlbmVmaWNpYXJpZXMgPSBzdW0odG90YWxfcmVhY2hlZCwgbmEucm0gPSBUUlVFKSkgJT4lIA0KICBncm91cF9ieShpbmRpY2F0b3Jfc2hvcnQpICU+JSANCiAgYXJyYW5nZShkYXRlKSAlPiUgDQogIG11dGF0ZShjdW1fYmVuID0gY3Vtc3VtKGJlbmVmaWNpYXJpZXMpKSAlPiUgDQogIGFycmFuZ2UoaW5kaWNhdG9yX3Nob3J0KSAlPiUgIA0KICBnZ3Bsb3QoYWVzKHggPSBkYXRlLCB5ID0gY3VtX2JlbiwgY29sb3VyID0gaW5kaWNhdG9yX3Nob3J0KSkgKyANCiAgIyBnZW9tX3Ntb290aChzaXplID0gMSwgYWxwaGEgPSAuMywgc3BhbiA9IC41LCBsaW5ldHlwZSA9IDApICsNCiAgc3RhdF9zbW9vdGgoZ2VvbSA9ICJsaW5lIiwgYXBoYSA9IC4zLCBzcGFuID0gLjUpICsgDQogIGdlb21fcG9pbnQoKSArIA0KICBnZW9tX3RleHQoYWVzKGxhYmVsID0gY29tbWEoYmVuZWZpY2lhcmllcykpLCANCiAgICAgICAgICAgIHggPSAtSW5mLCB5ID0gSW5mLCBoanVzdCA9IC0wLjE1LCB2anVzdCA9IDAuOSwgZGF0YSA9IGxpbmVfdmFsdWVzKSArIA0KICBzY2FsZV94X2RhdGUoZGF0ZV9icmVha3MgPSAiMSBtb250aCIsIGRhdGVfbGFiZWxzID0gIiViIikgKyANCiAgc2NhbGVfeV9jb250aW51b3VzKGxhYmVscyA9IGNvbW1hKSArIA0KICBmYWNldF93cmFwKH5pbmRpY2F0b3Jfc2hvcnQsIHNjYWxlcyA9ICJmcmVlX3kiKSArIA0KICB0aGVtZShsZWdlbmQucG9zaXRpb24gPSAibm9uZSIsDQogICAgICAgIGF4aXMudGV4dC54ID0gZWxlbWVudF90ZXh0KHNpemUgPSA2LCBhbmdsZSA9IDYwLCBoanVzdCA9IDEsIHZqdXN0ID0gMSksIA0KICAgICAgICBheGlzLnRleHQueSA9IGVsZW1lbnRfdGV4dChzaXplID0gNiksIA0KICAgICAgICBzdHJpcC50ZXh0ID0gZWxlbWVudF90ZXh0KHNpemUgPSA2LCBmYWNlID0gImJvbGQiKSwNCiAgICAgICAgc3RyaXAuYmFja2dyb3VuZCA9IGVsZW1lbnRfcmVjdChmaWxsID0gIiMyMTIxMjEiKSwgDQogICAgICAgIHBsb3QudGl0bGUgPSBlbGVtZW50X3RleHQoc2l6ZSA9IDEyKSkgKyANCiAgbGFicyh4ID0gIiIsIA0KICAgICAgIHkgPSAiQ3VtdWxhdGl2ZSBpbnRlcnZlbnRpb25zIiwgDQogICAgICAgdGl0bGUgPSBwYXN0ZTAoIk1vbnRobHkgcHJvZ3Jlc3MgYnkgYWN0aXZpdHksICIsIHBhcmFtcyRyZXBvcnRfZGF0ZSksDQogICAgICAgc3VidGl0bGUgPSAiSW5kaWNhdG9yIHN1YnRvdGFsIGluIHRoZSB0b3AtbGVmdCBjb3JuZXIgb2YgZWFjaCBmYWNldCIpIA0KICANCg0KDQpgYGANCjxicj4NCg0KVGhlIHJhdGUgb2YgaW5jcmVhc2UgaW4gdGhlIG51bWJlciBvZiBiZW5lZmljaWFyaWVzIHJlYWNoZWQgaGFzIHlldCB0byBwbGF0ZWF1LCB3aXRoIG9ubHkgaW5kaWNhdG9ycyAyIGFuZCA2IHNlZWluZyBzbGlnaHQgc2xvd2Rvd25zIGluIHRoZSBudW1iZXIgb2YgYmVuZWZpY2lhcmllcyByZWFjaGVkIGVhY2ggbW9udGguIA0KDQo8YnI+PGJyPjxicj4NCg0KDQojIyAyLjIgUmVhY2hlZCBieSBpbmRpY2F0b3INCg0KYGBge3J9DQpiZW5fcGxvdCA8LSBmdW5jdGlvbih0YmwpIHsNCiAgdGJsICU+JSANCiAgICBncm91cF9ieShpbmRpY2F0b3Jfc2hvcnQsIGNvdW50eSkgJT4lIA0KICAgIHN1bW1hcmlzZShiZW5lZmljaWFyaWVzID0gc3VtKHRvdGFsX3JlYWNoZWQsIG5hLnJtID0gVFJVRSkpICU+JSANCiAgICBmdWxsX2pvaW4odGFyZ2V0cyAlPiUgDQogICAgICAgICAgICAgICAgZmlsdGVyKHRhcmdldF91bml0ICVpbiUgYygicGVvcGxlIikpICU+JSANCiAgICAgICAgICAgICAgICBzZWxlY3QoY291bnR5LCBpbmRpY2F0b3Jfc2hvcnQsIGNvdW50eV90YXJnZXQpLCANCiAgICAgICAgICAgICAgYnkgPSBjKCJjb3VudHkiLCAiaW5kaWNhdG9yX3Nob3J0IikpICU+JSANCiAgICByZXBsYWNlX25hKGxpc3QoY291bnR5X3RhcmdldCA9IDAsIA0KICAgICAgICAgICAgICAgICAgICBiZW5lZmljaWFyaWVzID0gMCkpICU+JSANCiAgICBmaWx0ZXIoYmVuZWZpY2lhcmllcyA+IDApICU+JSANCiAgICBtdXRhdGUocGMgPSBpZmVsc2UoY291bnR5X3RhcmdldCA+IDAsIGJlbmVmaWNpYXJpZXMgLyBjb3VudHlfdGFyZ2V0LCAwKSwgDQogICAgICAgICAgIGNvdW50eSA9IGZjdF9yZW9yZGVyKGNvdW50eSwgYmVuZWZpY2lhcmllcykpICU+JSAgDQogICAgZ2dwbG90KGFlcyh4ID0gYmVuZWZpY2lhcmllcywgeSA9IGNvdW50eSkpICsgDQogICAgZ2VvbV9jb2woYWVzKGZpbGwgPSBwYykpICsNCiAgICBnZW9tX3RleHQoYWVzKGxhYmVsID0gY29tbWEoYmVuZWZpY2lhcmllcyksIGhqdXN0ID0gImlud2FyZCIpLCANCiAgICAgICAgICAgICAgY29sb3VyID0gImdyZXk0NSIpICsgDQogICAgc2NhbGVfeF9jb250aW51b3VzKGxhYmVscyA9IGNvbW1hKSArDQogICAgc2NhbGVfZmlsbF92aXJpZGlzKGRpcmVjdGlvbiA9IC0xLCBvcHRpb24gPSAibWFrbyIsIA0KICAgICAgICAgICAgICAgICAgICAgICBsYWJlbHMgPSBwZXJjZW50LCBiZWdpbiA9IC4yKSArIA0KICAgIGxhYnModGl0bGUgPSAiQmVuZWZpY2lhcmllcyByZWFjaGVkIiwgDQogICAgICAgICB4ID0gIkJlbmVmaWNpYXJpZXMiLCANCiAgICAgICAgIHkgPSAiIiwgDQogICAgICAgICBmaWxsID0gIiUgcmVhY2hlZCIpIA0KfQ0KDQpwY19wbG90IDwtIGZ1bmN0aW9uKHRibCkgew0KICB0YmwgJT4lIA0KICAgIGdyb3VwX2J5KGluZGljYXRvcl9zaG9ydCwgY291bnR5KSAlPiUgDQogICAgc3VtbWFyaXNlKGJlbmVmaWNpYXJpZXMgPSBzdW0odG90YWxfcmVhY2hlZCwgbmEucm0gPSBUUlVFKSkgJT4lIA0KICAgIGZ1bGxfam9pbih0YXJnZXRzICU+JSANCiAgICAgICAgICAgICAgICBmaWx0ZXIodGFyZ2V0X3VuaXQgJWluJSBjKCJwZW9wbGUiKSkgJT4lIA0KICAgICAgICAgICAgICAgIHNlbGVjdChjb3VudHksIGluZGljYXRvcl9zaG9ydCwgY291bnR5X3RhcmdldCksIA0KICAgICAgICAgICAgICBieSA9IGMoImNvdW50eSIsICJpbmRpY2F0b3Jfc2hvcnQiKSkgJT4lIA0KICAgIHJlcGxhY2VfbmEobGlzdChjb3VudHlfdGFyZ2V0ID0gMCwgDQogICAgICAgICAgICAgICAgICAgIGJlbmVmaWNpYXJpZXMgPSAwKSkgJT4lIA0KICAgIGZpbHRlcihiZW5lZmljaWFyaWVzID4gMCkgJT4lIA0KICAgIG11dGF0ZShwYyA9IGlmZWxzZShjb3VudHlfdGFyZ2V0ID4gMCwgYmVuZWZpY2lhcmllcyAvIGNvdW50eV90YXJnZXQsIDApLCANCiAgICAgICAgICAgY291bnR5ID0gZmN0X3Jlb3JkZXIoY291bnR5LCBiZW5lZmljaWFyaWVzKSkgJT4lICANCiAgICBnZ3Bsb3QoYWVzKHggPSBwYywgeSA9IGNvdW50eSkpICsgDQogICAgZ2VvbV9jb2woYWVzKGZpbGwgPSBwYykpICsgDQogICAgZ2VvbV90ZXh0KGFlcyhsYWJlbCA9IHBlcmNlbnQocGMsIGFjY3VyYWN5ID0gLjEpLCBoanVzdCA9ICJpbndhcmQiKSwgDQogICAgICAgICAgICAgIGNvbG91ciA9ICJncmV5NDUiKSArIA0KICAgIHNjYWxlX3hfY29udGludW91cyhsYWJlbHMgPSBwZXJjZW50KSArDQogICAgc2NhbGVfZmlsbF92aXJpZGlzKGRpcmVjdGlvbiA9IC0xLCBvcHRpb24gPSAibWFrbyIsIA0KICAgICAgICAgICAgICAgICAgICAgICBsYWJlbHMgPSBwZXJjZW50LCBiZWdpbiA9IC4yKSArIA0KICAgIGxhYnModGl0bGUgPSAiJSBvZiB0YXJnZXQgcmVhY2hlZCIsIA0KICAgICAgICAgeCA9ICIlIHJlYWNoZWQiLCANCiAgICAgICAgIHkgPSAiIiwgDQogICAgICAgICBmaWxsID0gIiUgcmVhY2hlZCIpICsNCiAgICANCiAgICB0aGVtZShsZWdlbmQucG9zaXRpb24gPSAibm9uZSIpDQp9DQpgYGANCg0KYGBge3J9DQp0YXJnZXRzX3JhbmdlIDwtIHRhcmdldHMgJT4lIA0KICBmaWx0ZXIodGFyZ2V0X3VuaXQgPT0gInBlb3BsZSIpICU+JSANCiAgZ3JvdXBfYnkoaW5kaWNhdG9yX3Nob3J0LCBjb3VudHkpICU+JSANCiAgc3VtbWFyaXNlKHRhcmdldCA9IHN1bShjb3VudHlfdGFyZ2V0LCBuYS5ybSA9IFRSVUUpKSAlPiUgDQogIHBpdm90X3dpZGVyKG5hbWVzX2Zyb20gPSBpbmRpY2F0b3Jfc2hvcnQsIHZhbHVlc19mcm9tID0gdGFyZ2V0KSAlPiUgDQogIHNldE5hbWVzKGMoImNvdW50eSIsICJpbmRpY2F0b3IxIiwgImluZGljYXRvcjIiLCAiaW5kaWNhdG9yMyIsICJpbmRpY2F0b3I0IiwgDQogICAgICAgICAgICAgImluZGljYXRvcjUiLCAiaW5kaWNhdG9yNiIpKQ0KDQppbmRpY2F0b3JfbWFwIDwtIGZ1bmN0aW9uKHRibCwgaW5kaWNhdG9yX251bWJlciwgcGxvdF9vcHRpb24pIHsNCiAgDQogIHBsb3Rfb3B0aW9uIDwtIGVucXVvKHBsb3Rfb3B0aW9uKQ0KICBpbmRpY2F0b3JfbnVtYmVyIDwtIGVucXVvKGluZGljYXRvcl9udW1iZXIpDQogIA0KICB0YmwgJT4lIA0KICAgIGZpbHRlcihzdHJfZGV0ZWN0KGluZGljYXRvcl9zaG9ydCwgISFpbmRpY2F0b3JfbnVtYmVyKSkgJT4lIA0KICAgIGdyb3VwX2J5KGluZGljYXRvcl9zaG9ydCwgY291bnR5KSAlPiUgDQogICAgc3VtbWFyaXNlKGJlbmVmaWNpYXJpZXMgPSBzdW0odG90YWxfcmVhY2hlZCwgbmEucm0gPSBUUlVFKSkgJT4lIA0KICAgIGZ1bGxfam9pbih0YXJnZXRzICU+JSANCiAgICAgICAgICAgICAgICBmaWx0ZXIoc3RyX2RldGVjdChpbmRpY2F0b3Jfc2hvcnQsICEhaW5kaWNhdG9yX251bWJlcikpICU+JQ0KICAgICAgICAgICAgICAgIGZpbHRlcih0YXJnZXRfdW5pdCAlaW4lIGMoInBlb3BsZSIpKSAlPiUgDQogICAgICAgICAgICAgICAgc2VsZWN0KGNvdW50eSwgaW5kaWNhdG9yX3Nob3J0LCBjb3VudHlfdGFyZ2V0KSwgDQogICAgICAgICAgICAgIGJ5ID0gYygiY291bnR5IiwgImluZGljYXRvcl9zaG9ydCIpKSAlPiUgDQogICAgcmVwbGFjZV9uYShsaXN0KGNvdW50eV90YXJnZXQgPSAwLCANCiAgICAgICAgICAgICAgICAgICAgYmVuZWZpY2lhcmllcyA9IDApKSAlPiUgDQogICAgZmlsdGVyKGJlbmVmaWNpYXJpZXMgPiAwIHwgY291bnR5X3RhcmdldCA+IDApICAlPiUgDQogICAgbXV0YXRlKHBjID0gaWZlbHNlKGNvdW50eV90YXJnZXQgPiAwLCBiZW5lZmljaWFyaWVzIC8gY291bnR5X3RhcmdldCwgMCksIA0KICAgICAgICAgICBjb3VudHkgPSBmY3RfcmVvcmRlcihjb3VudHksIGJlbmVmaWNpYXJpZXMpKSAlPiUgDQogICAgbmFuaWFyOjpyZXBsYWNlX3dpdGhfbmEobGlzdChiZW5lZmljaWFyaWVzID0gMCkpICU+JSANCiAgICBsZWZ0X2pvaW4obG9jYXRpb25zICU+JSANCiAgICAgICAgICAgICAgICBkaXN0aW5jdChjb3VudHkgPSBhZG0xX2VuLCBhZG0xX3Bjb2RlKSwgDQogICAgICAgICAgICAgIGJ5ID0gImNvdW50eSIpICU+JSANCiAgICByaWdodF9qb2luKHBjb2RlMV9zaGFwZSwgYnkgPSBjKCJhZG0xX3Bjb2RlIikpICU+JQ0KICAgIHN0X2FzX3NmKCkgJT4lIA0KICAgIGdncGxvdCgpICsgDQogICAgZ2VvbV9zZihzaXplID0gLjAxLCBjb2xvdXIgPSAiZ3JleTcwIiwgDQogICAgICAgICAgICBhZXMoZmlsbCA9ICEhcGxvdF9vcHRpb24pKSArIA0KICAgIGdlb21fc2ZfdGV4dChhZXMobGFiZWwgPSBjb21tYSghIXBsb3Rfb3B0aW9uKSksDQogICAgICAgICAgICAgICAgIGNvbG91ciA9ICJncmV5NDUiLA0KICAgICAgICAgICAgICAgICBzaXplID0gMi41KSArIA0KICAgIHNjYWxlX2ZpbGxfdmlyaWRpc19jKGxhYmVscyA9IGNvbW1hLCANCiAgICAgICAgICAgICAgICAgICAgICAgICBuYS52YWx1ZSA9ICJncmV5ODAiKSArIA0KICAgIHRoZW1lX3ZvaWQoKSArIA0KICAgIHRoZW1lKHBsb3QudGl0bGUgPSBlbGVtZW50X3RleHQoaGp1c3QgPSAuNSkpDQogICAgDQp9DQoNCmBgYA0KDQojIyMgMi4yLjEgQWNjZXNzIHRvIEVDRCBzcGFjZXMvc2Nob29scw0KDQo8YnI+DQoNCmBgYHtyfQ0Kc3VtbWFyeV90YWJsZSAlPiUgDQogIGZpbHRlcihzdHJfZGV0ZWN0KEluZGljYXRvciwgIjEiKSkgJT4lIA0KICBmbGV4dGFibGUoKSAlPiUgDQogIHNldF9jYXB0aW9uKHBhc3RlMCgiRWlFIEluZGljYXRvciAxLCBhcyBvZiAiLCBwYXJhbXMkcmVwb3J0X2RhdGUpKSAlPiUgDQogIHNldF90YWJsZV9wcm9wZXJ0aWVzKGxheW91dCA9ICJhdXRvZml0Iiwgd2lkdGggPSAuOTkpDQoNCmBgYA0KDQo8YnI+DQoNCmBgYHtyfQ0KaW5kaWNhdG9yX21hcChlaWUsICIxIiwgY291bnR5X3RhcmdldCkgKw0KICBsYWJzKHRpdGxlID0gIlRhcmdldHMiLCANCiAgICAgICBmaWxsID0gIlRhcmdldCIpICArIA0KaW5kaWNhdG9yX21hcChlaWUsICIxIiwgYmVuZWZpY2lhcmllcykgKyANCiAgc2NhbGVfZmlsbF92aXJpZGlzKGxpbWl0cyA9IHJhbmdlKHRhcmdldHNfcmFuZ2UkaW5kaWNhdG9yMSksIA0KICAgICAgICAgICAgICAgICAgICAgbGFiZWxzID0gY29tbWEsIA0KICAgICAgICAgICAgICAgICAgICAgbmEudmFsdWUgPSAiZ3JleTgwIikgKyANCiAgbGFicyh0aXRsZSA9ICJUb3RhbCByZWFjaGVkIiwgDQogICAgICAgZmlsbCA9ICJSZWFjaGVkIikgKw0KICBwbG90X2Fubm90YXRpb24odGl0bGUgPSAiMS4gQWNjZXNzIHRvIEVDRCBzcGFjZXMvc2Nob29scywgdGFyZ2V0IGFuZCByZWFjaGVkIiwgDQogICAgICAgICAgICAgICAgICBzdWJ0aXRsZSA9IHBhc3RlMCgiQXMgb2YgIiwgcGFyYW1zJHJlcG9ydF9kYXRlKSkgDQoNCmBgYA0KDQoNCg0KPGJyPg0KDQpJbiBgciBwYXJhbXMkcmVwb3J0X21vbnRoYCAyMDIzLCBgciBlaWUgJT4lIGZpbHRlcihtb250aCAlaW4lIHBhcmFtcyRyZXBvcnRfbW9udGggJiBzdHJfZGV0ZWN0KGluZGljYXRvcl9zaG9ydCwgIjEiKSAmIGFjdGl2aXR5X3N0YXR1cyA9PSAiQ29tcGxldGVkIikgJT4lIHtzdW0oLiR0b3RhbF9yZWFjaGVkLCBuYS5ybSA9IFRSVUUpfSAlPiUgZm9ybWF0KGJpZy5tYXJrID0gIiwiKWAgcGVyc29ucyB3ZXJlIHJlYWNoZWQgYnkgaW50ZXJ2ZW50aW9ucyBjb250cmlidXRpbmcgdG8gdGhpcyBpbmRpY2F0b3IsIG9mIHdoaWNoIGByIGVpZSAlPiUgZmlsdGVyKG1vbnRoICVpbiUgcGFyYW1zJHJlcG9ydF9tb250aCAmIHN0cl9kZXRlY3QoaW5kaWNhdG9yX3Nob3J0LCAiMSIpICYgYWN0aXZpdHlfc3RhdHVzID09ICJDb21wbGV0ZWQiKSAlPiUge3N1bSguJGJveXMsIG5hLnJtID0gVFJVRSl9ICU+JSBmb3JtYXQoYmlnLm1hcmsgPSAiLCIpYCB3ZXJlIGJveXMgYW5kIGByIGVpZSAlPiUgZmlsdGVyKG1vbnRoICVpbiUgcGFyYW1zJHJlcG9ydF9tb250aCAmIHN0cl9kZXRlY3QoaW5kaWNhdG9yX3Nob3J0LCAiMSIpICYgYWN0aXZpdHlfc3RhdHVzID09ICJDb21wbGV0ZWQiKSAlPiUge3N1bSguJGdpcmxzLCBuYS5ybSA9IFRSVUUpfSAlPiUgZm9ybWF0KGJpZy5tYXJrID0gIiwiKWAgd2VyZSBnaXJscy4NCg0KPGJyPg0KDQpgYGB7ciBmaWcuaGVpZ2h0PTZ9DQplaWUgJT4lIA0KICBmaWx0ZXIoc3RyX2RldGVjdChpbmRpY2F0b3Jfc2hvcnQsICIxIikpICU+JSANCiAgcGNfcGxvdCgpICsNCg0KZWllICU+JSANCiAgZmlsdGVyKHN0cl9kZXRlY3QoaW5kaWNhdG9yX3Nob3J0LCAiMSIpKSAlPiUgDQogIGJlbl9wbG90KCkgKw0KICANCnBsb3RfYW5ub3RhdGlvbih0aXRsZSA9ICIxLiBDaGlsZHJlbiBhY2Nlc3NpbmcgRUNEIHNwYWNlcy9zY2hvb2xzLCB0YXJnZXQgYW5kIHJlYWNoZWQiLCANCiAgICAgICAgICAgICAgICBzdWJ0aXRsZSA9ICJDb3VudGllcyB3aXRob3V0IHRhcmdldHMgaGF2ZSAwJSByZWFjaGVkIikNCg0KIA0KYGBgDQoNCjxicj48YnI+PGJyPg0KDQojIyMgMi4yLjIgU2Nob29sIGZlZWRpbmcgcHJvZ3JhbW1lcw0KDQo8YnI+DQoNCmBgYHtyfQ0Kc3VtbWFyeV90YWJsZSAlPiUgDQogIGZpbHRlcihzdHJfZGV0ZWN0KEluZGljYXRvciwgIjIiKSkgJT4lIA0KICBmbGV4dGFibGUoKSAlPiUgDQogIHNldF9jYXB0aW9uKHBhc3RlMCgiRWlFIEluZGljYXRvciAyLCBhcyBvZiAiLCBwYXJhbXMkcmVwb3J0X2RhdGUpKSAlPiUgDQogIHNldF90YWJsZV9wcm9wZXJ0aWVzKGxheW91dCA9ICJhdXRvZml0Iiwgd2lkdGggPSAuOTkpIA0KYGBgDQoNCjxicj4NCg0KYGBge3J9DQppbmRpY2F0b3JfbWFwKGVpZSwgIjIiLCBjb3VudHlfdGFyZ2V0KSArDQogIGxhYnModGl0bGUgPSAiVGFyZ2V0cyIsIA0KICAgICAgIGZpbGwgPSAiVGFyZ2V0IikgICsgDQppbmRpY2F0b3JfbWFwKGVpZSwgIjIiLCBiZW5lZmljaWFyaWVzKSArIA0KICBzY2FsZV9maWxsX3ZpcmlkaXMobGltaXRzID0gcmFuZ2UodGFyZ2V0c19yYW5nZSRpbmRpY2F0b3IyKSwgDQogICAgICAgICAgICAgICAgICAgICBsYWJlbHMgPSBjb21tYSwgDQogICAgICAgICAgICAgICAgICAgICBuYS52YWx1ZSA9ICJncmV5ODAiKSArIA0KICBsYWJzKHRpdGxlID0gIlRvdGFsIHJlYWNoZWQiLCANCiAgICAgICBmaWxsID0gIlJlYWNoZWQiKSArDQogIHBsb3RfYW5ub3RhdGlvbih0aXRsZSA9ICIyLiBTY2hvb2wgZmVlZGluZyBwcm9ncmFtbWVzLCB0YXJnZXQgYW5kIHJlYWNoZWQiLCANCiAgICAgICAgICAgICAgICAgIHN1YnRpdGxlID0gcGFzdGUwKCJBcyBvZiAiLCBwYXJhbXMkcmVwb3J0X2RhdGUpKSANCg0KICANCmBgYA0KDQo8YnI+DQoNCkluIGByIHBhcmFtcyRyZXBvcnRfbW9udGhgIDIwMjMsIGByIGVpZSAlPiUgZmlsdGVyKG1vbnRoICVpbiUgcGFyYW1zJHJlcG9ydF9tb250aCAmIHN0cl9kZXRlY3QoaW5kaWNhdG9yX3Nob3J0LCAiMiIpICYgYWN0aXZpdHlfc3RhdHVzID09ICJDb21wbGV0ZWQiKSAlPiUge3N1bSguJHRvdGFsX3JlYWNoZWQsIG5hLnJtID0gVFJVRSl9ICU+JSBmb3JtYXQoYmlnLm1hcmsgPSAiLCIpYCBwZXJzb25zIHdlcmUgcmVhY2hlZCBieSBpbnRlcnZlbnRpb25zIGNvbnRyaWJ1dGluZyB0byB0aGlzIGluZGljYXRvciwgb2Ygd2hpY2ggYHIgZWllICU+JSBmaWx0ZXIobW9udGggJWluJSBwYXJhbXMkcmVwb3J0X21vbnRoICYgc3RyX2RldGVjdChpbmRpY2F0b3Jfc2hvcnQsICIyIikgJiBhY3Rpdml0eV9zdGF0dXMgPT0gIkNvbXBsZXRlZCIpICU+JSB7c3VtKC4kYm95cywgbmEucm0gPSBUUlVFKX0gJT4lIGZvcm1hdChiaWcubWFyayA9ICIsIilgIHdlcmUgYm95cyBhbmQgYHIgZWllICU+JSBmaWx0ZXIobW9udGggJWluJSBwYXJhbXMkcmVwb3J0X21vbnRoICYgc3RyX2RldGVjdChpbmRpY2F0b3Jfc2hvcnQsICIyIikgJiBhY3Rpdml0eV9zdGF0dXMgPT0gIkNvbXBsZXRlZCIpICU+JSB7c3VtKC4kZ2lybHMsIG5hLnJtID0gVFJVRSl9ICU+JSBmb3JtYXQoYmlnLm1hcmsgPSAiLCIpYCB3ZXJlIGdpcmxzLiANCg0KPGJyPg0KDQpgYGB7cn0NCmVpZSAlPiUgDQogIGZpbHRlcihzdHJfZGV0ZWN0KGluZGljYXRvcl9zaG9ydCwgIjIiKSkgJT4lIA0KICBwY19wbG90KCkgKw0KDQplaWUgJT4lIA0KICBmaWx0ZXIoc3RyX2RldGVjdChpbmRpY2F0b3Jfc2hvcnQsICIyIikpICU+JSANCiAgYmVuX3Bsb3QoKSArDQogIA0KcGxvdF9hbm5vdGF0aW9uKHRpdGxlID0gIjIuIEZlZWRpbmcgcHJvZ3JhbW1lcyIsIA0KICAgICAgICAgICAgICAgIHN1YnRpdGxlID0gIkNvdW50aWVzIHdpdGhvdXQgdGFyZ2V0cyBoYXZlIDAlIHJlYWNoZWQiKQ0KDQoNCmBgYA0KDQoNCjxicj48YnI+PGJyPg0KDQojIyMgMi4yLjMgVGVhY2hpbmcgYW5kIGxlYXJuaW5nIG1hdGVyaWFscw0KDQo8YnI+DQoNCmBgYHtyfQ0Kc3VtbWFyeV90YWJsZSAlPiUgDQogIGZpbHRlcihzdHJfZGV0ZWN0KEluZGljYXRvciwgIjMiKSkgJT4lIA0KICBmbGV4dGFibGUoKSAlPiUgDQogIHNldF9jYXB0aW9uKHBhc3RlMCgiRWlFIEluZGljYXRvciAzLCBhcyBvZiAiLCBwYXJhbXMkcmVwb3J0X2RhdGUpKSAlPiUgDQogIHNldF90YWJsZV9wcm9wZXJ0aWVzKGxheW91dCA9ICJhdXRvZml0Iiwgd2lkdGggPSAuOTkpIA0KYGBgDQoNCjxicj4NCg0KYGBge3J9DQppbmRpY2F0b3JfbWFwKGVpZSwgIjMiLCBjb3VudHlfdGFyZ2V0KSArDQogIGxhYnModGl0bGUgPSAiVGFyZ2V0cyIsIA0KICAgICAgIGZpbGwgPSAiVGFyZ2V0IikgICsgDQppbmRpY2F0b3JfbWFwKGVpZSwgIjMiLCBiZW5lZmljaWFyaWVzKSArIA0KICBzY2FsZV9maWxsX3ZpcmlkaXMobGltaXRzID0gcmFuZ2UodGFyZ2V0c19yYW5nZSRpbmRpY2F0b3IzKSwgDQogICAgICAgICAgICAgICAgICAgICBsYWJlbHMgPSBjb21tYSwgDQogICAgICAgICAgICAgICAgICAgICBuYS52YWx1ZSA9ICJncmV5ODAiKSArIA0KICBsYWJzKHRpdGxlID0gIlRvdGFsIHJlYWNoZWQiLCANCiAgICAgICBmaWxsID0gIlJlYWNoZWQiKSArDQogIHBsb3RfYW5ub3RhdGlvbih0aXRsZSA9ICIzLiBUZWFjaGluZyBhbmQgbGVhcm5pbmcgbWF0ZXJpYWxzLCB0YXJnZXQgYW5kIHJlYWNoZWQiLCANCiAgICAgICAgICAgICAgICAgIHN1YnRpdGxlID0gcGFzdGUwKCJBcyBvZiAiLCBwYXJhbXMkcmVwb3J0X2RhdGUpKSANCg0KICANCmBgYA0KDQo8YnI+DQoNCkluIGByIHBhcmFtcyRyZXBvcnRfbW9udGhgIDIwMjMsIGByIGVpZSAlPiUgZmlsdGVyKG1vbnRoICVpbiUgcGFyYW1zJHJlcG9ydF9tb250aCAmIHN0cl9kZXRlY3QoaW5kaWNhdG9yX3Nob3J0LCAiMyIpICYgYWN0aXZpdHlfc3RhdHVzID09ICJDb21wbGV0ZWQiKSAlPiUge3N1bSguJHRvdGFsX3JlYWNoZWQsIG5hLnJtID0gVFJVRSl9ICU+JSBmb3JtYXQoYmlnLm1hcmsgPSAiLCIpYCBwZXJzb25zIHdlcmUgcmVhY2hlZCBieSBpbnRlcnZlbnRpb25zIGNvbnRyaWJ1dGluZyB0byB0aGlzIGluZGljYXRvciwgb2Ygd2hpY2ggYHIgZWllICU+JSBmaWx0ZXIobW9udGggJWluJSBwYXJhbXMkcmVwb3J0X21vbnRoICYgc3RyX2RldGVjdChpbmRpY2F0b3Jfc2hvcnQsICIzIikgJiBhY3Rpdml0eV9zdGF0dXMgPT0gIkNvbXBsZXRlZCIpICU+JSB7c3VtKC4kYm95cywgbmEucm0gPSBUUlVFKX0gJT4lIGZvcm1hdChiaWcubWFyayA9ICIsIilgIHdlcmUgYm95cywgIGByIGVpZSAlPiUgZmlsdGVyKG1vbnRoICVpbiUgcGFyYW1zJHJlcG9ydF9tb250aCAmIHN0cl9kZXRlY3QoaW5kaWNhdG9yX3Nob3J0LCAiMyIpICYgYWN0aXZpdHlfc3RhdHVzID09ICJDb21wbGV0ZWQiKSAlPiUge3N1bSguJGdpcmxzLCBuYS5ybSA9IFRSVUUpfSAlPiUgZm9ybWF0KGJpZy5tYXJrID0gIiwiKWAgd2VyZSBnaXJscywgYHIgZWllICU+JSBmaWx0ZXIobW9udGggJWluJSBwYXJhbXMkcmVwb3J0X21vbnRoICYgc3RyX2RldGVjdChpbmRpY2F0b3Jfc2hvcnQsICIzIikgJiBhY3Rpdml0eV9zdGF0dXMgPT0gIkNvbXBsZXRlZCIpICU+JSB7c3VtKC4kbWVuLCBuYS5ybSA9IFRSVUUpfSAlPiUgZm9ybWF0KGJpZy5tYXJrID0gIiwiKWAgd2VyZSBtZW4gYW5kIGByIGVpZSAlPiUgZmlsdGVyKG1vbnRoICVpbiUgcGFyYW1zJHJlcG9ydF9tb250aCAmIHN0cl9kZXRlY3QoaW5kaWNhdG9yX3Nob3J0LCAiMyIpICYgYWN0aXZpdHlfc3RhdHVzID09ICJDb21wbGV0ZWQiKSAlPiUge3N1bSguJHdvbWVuLCBuYS5ybSA9IFRSVUUpfSAlPiUgZm9ybWF0KGJpZy5tYXJrID0gIiwiKWAgd2VyZSB3b21lbi4gDQoNCjxicj4NCg0KYGBge3J9DQplaWUgJT4lIA0KICBmaWx0ZXIoc3RyX2RldGVjdChpbmRpY2F0b3Jfc2hvcnQsICIzIikpICU+JSANCiAgcGNfcGxvdCgpICsNCg0KZWllICU+JSANCiAgZmlsdGVyKHN0cl9kZXRlY3QoaW5kaWNhdG9yX3Nob3J0LCAiMyIpKSAlPiUgDQogIGJlbl9wbG90KCkgKw0KICANCnBsb3RfYW5ub3RhdGlvbih0aXRsZSA9ICIzLiBUZWFjaGluZyBtYXRlcmlhbHMiLCANCiAgICAgICAgICAgICAgICBzdWJ0aXRsZSA9ICJDb3VudGllcyB3aXRob3V0IHRhcmdldHMgaGF2ZSAwJSByZWFjaGVkIikNCg0KDQpgYGANCg0KPGJyPjxicj48YnI+DQoNCiMjIyAyLjIuNCBTYWZlIHdhdGVyLCBwZXJzb25hbCBoeWdpZW5lDQoNCjxicj4NCg0KYGBge3J9DQpzdW1tYXJ5X3RhYmxlICU+JSANCiAgZmlsdGVyKHN0cl9kZXRlY3QoSW5kaWNhdG9yLCAiNCIpKSAlPiUgDQogIGZsZXh0YWJsZSgpICU+JSANCiAgc2V0X2NhcHRpb24ocGFzdGUwKCJFaUUgSW5kaWNhdG9yIDQsIGFzIG9mICIsIHBhcmFtcyRyZXBvcnRfZGF0ZSkpICU+JSANCiAgc2V0X3RhYmxlX3Byb3BlcnRpZXMobGF5b3V0ID0gImF1dG9maXQiLCB3aWR0aCA9IC45OSkgDQpgYGANCg0KPGJyPg0KDQpgYGB7cn0NCmluZGljYXRvcl9tYXAoZWllLCAiNCIsIGNvdW50eV90YXJnZXQpICsNCiAgbGFicyh0aXRsZSA9ICJUYXJnZXRzIiwgDQogICAgICAgZmlsbCA9ICJUYXJnZXQiKSAgKyANCmluZGljYXRvcl9tYXAoZWllLCAiNCIsIGJlbmVmaWNpYXJpZXMpICsgDQogIHNjYWxlX2ZpbGxfdmlyaWRpcyhsaW1pdHMgPSByYW5nZSh0YXJnZXRzX3JhbmdlJGluZGljYXRvcjQpLCANCiAgICAgICAgICAgICAgICAgICAgIGxhYmVscyA9IGNvbW1hLCANCiAgICAgICAgICAgICAgICAgICAgIG5hLnZhbHVlID0gImdyZXk4MCIpICsgDQogIGxhYnModGl0bGUgPSAiVG90YWwgcmVhY2hlZCIsIA0KICAgICAgIGZpbGwgPSAiUmVhY2hlZCIpICsNCiAgcGxvdF9hbm5vdGF0aW9uKHRpdGxlID0gIjQuIFNhZmUgd2F0ZXIsIHBlcnNvbmFsIGh5Z2llbmUsIHRhcmdldCBhbmQgcmVhY2hlZCIsIA0KICAgICAgICAgICAgICAgICAgc3VidGl0bGUgPSBwYXN0ZTAoIkFzIG9mICIsIHBhcmFtcyRyZXBvcnRfZGF0ZSkpIA0KDQogIA0KYGBgDQoNCjxicj4NCg0KSW4gYHIgcGFyYW1zJHJlcG9ydF9tb250aGAgMjAyMywgYHIgZWllICU+JSBmaWx0ZXIobW9udGggJWluJSBwYXJhbXMkcmVwb3J0X21vbnRoICYgc3RyX2RldGVjdChpbmRpY2F0b3Jfc2hvcnQsICI0IikgJiBhY3Rpdml0eV9zdGF0dXMgPT0gIkNvbXBsZXRlZCIpICU+JSB7c3VtKC4kdG90YWxfcmVhY2hlZCwgbmEucm0gPSBUUlVFKX0gJT4lIGZvcm1hdChiaWcubWFyayA9ICIsIilgIHBlcnNvbnMgd2VyZSByZWFjaGVkIGJ5IGludGVydmVudGlvbnMgY29udHJpYnV0aW5nIHRvIHRoaXMgaW5kaWNhdG9yLCBvZiB3aGljaCBgciBlaWUgJT4lIGZpbHRlcihtb250aCAlaW4lIHBhcmFtcyRyZXBvcnRfbW9udGggJiBzdHJfZGV0ZWN0KGluZGljYXRvcl9zaG9ydCwgIjQiKSAmIGFjdGl2aXR5X3N0YXR1cyA9PSAiQ29tcGxldGVkIikgJT4lIHtzdW0oLiRib3lzLCBuYS5ybSA9IFRSVUUpfSAlPiUgZm9ybWF0KGJpZy5tYXJrID0gIiwiKWAgd2VyZSBib3lzIGFuZCBgciBlaWUgJT4lIGZpbHRlcihtb250aCAlaW4lIHBhcmFtcyRyZXBvcnRfbW9udGggJiBzdHJfZGV0ZWN0KGluZGljYXRvcl9zaG9ydCwgIjQiKSAmIGFjdGl2aXR5X3N0YXR1cyA9PSAiQ29tcGxldGVkIikgJT4lIHtzdW0oLiRnaXJscywgbmEucm0gPSBUUlVFKX0gJT4lIGZvcm1hdChiaWcubWFyayA9ICIsIilgIGFuZCB3ZXJlIGdpcmxzLiANCg0KPGJyPg0KDQpgYGB7cn0NCmVpZSAlPiUgDQogIGZpbHRlcihzdHJfZGV0ZWN0KGluZGljYXRvcl9zaG9ydCwgIjQiKSkgJT4lIA0KICBwY19wbG90KCkgKw0KDQplaWUgJT4lDQogIGZpbHRlcihzdHJfZGV0ZWN0KGluZGljYXRvcl9zaG9ydCwgIjQiKSkgJT4lIA0KICBiZW5fcGxvdCgpICsNCiAgDQpwbG90X2Fubm90YXRpb24odGl0bGUgPSAiNC4gU2FmZSB3YXRlciwgcGVyc29uYWwgaHlnaWVuZSIsIA0KICAgICAgICAgICAgICAgIHN1YnRpdGxlID0gIkNvdW50aWVzIHdpdGhvdXQgJSByZWFjaGVkIGhhdmUgbm8gdGFyZ2V0IikNCg0KYGBgDQoNCjxicj48YnI+PGJyPg0KDQojIyMgMi4yLjUgRWR1Y2F0b3JzIHRyYWluZWQgaW4gcmVzaWxpZW5jZSBlbmhhbmNpbmcgcHJvZ3JhbW1lcw0KDQo8YnI+DQoNCmBgYHtyfQ0Kc3VtbWFyeV90YWJsZSAlPiUgDQogIGZpbHRlcihzdHJfZGV0ZWN0KEluZGljYXRvciwgIjUiKSkgJT4lIA0KICBmbGV4dGFibGUoKSAlPiUgDQogIHNldF9jYXB0aW9uKHBhc3RlMCgiRWlFIEluZGljYXRvciA1LCBhcyBvZiAiLCBwYXJhbXMkcmVwb3J0X2RhdGUpKSAlPiUgDQogIHNldF90YWJsZV9wcm9wZXJ0aWVzKGxheW91dCA9ICJhdXRvZml0Iiwgd2lkdGggPSAuOTkpIA0KYGBgDQoNCjxicj4NCg0KYGBge3J9DQppbmRpY2F0b3JfbWFwKGVpZSwgIjUiLCBjb3VudHlfdGFyZ2V0KSArDQogIHNjYWxlX2ZpbGxfdmlyaWRpc19jKG5hLnZhbHVlID0gImdyZXk4MCIsIGxpbWl0cyA9IHJhbmdlKGMoMCwgMTgxMykpKSArIA0KICBsYWJzKHRpdGxlID0gIlRhcmdldHMiLCANCiAgICAgICBmaWxsID0gIlRhcmdldCIpICArIA0KaW5kaWNhdG9yX21hcChlaWUsICI1IiwgYmVuZWZpY2lhcmllcykgKyANCiAgbGFicyh0aXRsZSA9ICJUb3RhbCByZWFjaGVkIiwgDQogICAgICAgZmlsbCA9ICJSZWFjaGVkIikgKw0KICBwbG90X2Fubm90YXRpb24odGl0bGUgPSAiNS4gRWR1Y2F0b3JzIHRyYWluZWQgaW4gcmVzaWxpZW5jZSBlbmhhbmNpbmcgcHJvZ3JhbW1lcywgdGFyZ2V0IGFuZCByZWFjaGVkIiwgDQogICAgICAgICAgICAgICAgICBzdWJ0aXRsZSA9IHBhc3RlMCgiQXMgb2YgIiwgcGFyYW1zJHJlcG9ydF9kYXRlKSkgDQoNCmBgYA0KDQo8YnI+DQoNCkluIGByIHBhcmFtcyRyZXBvcnRfbW9udGhgIDIwMjMsIGByIGVpZSAlPiUgZmlsdGVyKG1vbnRoICVpbiUgcGFyYW1zJHJlcG9ydF9tb250aCAmIHN0cl9kZXRlY3QoaW5kaWNhdG9yX3Nob3J0LCAiNSIpICYgYWN0aXZpdHlfc3RhdHVzID09ICJDb21wbGV0ZWQiKSAlPiUge3N1bSguJHRvdGFsX3JlYWNoZWQsIG5hLnJtID0gVFJVRSl9ICU+JSBmb3JtYXQoYmlnLm1hcmsgPSAiLCIpYCBwZXJzb25zIHdlcmUgcmVhY2hlZCBieSBpbnRlcnZlbnRpb25zIGNvbnRyaWJ1dGluZyB0byB0aGlzIGluZGljYXRvciwgb2Ygd2hpY2ggYHIgZWllICU+JSBmaWx0ZXIobW9udGggJWluJSBwYXJhbXMkcmVwb3J0X21vbnRoICYgc3RyX2RldGVjdChpbmRpY2F0b3Jfc2hvcnQsICI1IikgJiBhY3Rpdml0eV9zdGF0dXMgPT0gIkNvbXBsZXRlZCIpICU+JSB7c3VtKC4kbWVuLCBuYS5ybSA9IFRSVUUpfSAlPiUgZm9ybWF0KGJpZy5tYXJrID0gIiwiKWAgd2VyZSBtZW4gYW5kIGByIGVpZSAlPiUgZmlsdGVyKG1vbnRoICVpbiUgcGFyYW1zJHJlcG9ydF9tb250aCAmIHN0cl9kZXRlY3QoaW5kaWNhdG9yX3Nob3J0LCAiNSIpICYgYWN0aXZpdHlfc3RhdHVzID09ICJDb21wbGV0ZWQiKSAlPiUge3N1bSguJHdvbWVuLCBuYS5ybSA9IFRSVUUpfSAlPiUgZm9ybWF0KGJpZy5tYXJrID0gIiwiKWAgYW5kIHdlcmUgd29tZW4uIA0KDQoNCjxicj4NCg0KYGBge3J9DQplaWUgJT4lIA0KICBmaWx0ZXIoc3RyX2RldGVjdChpbmRpY2F0b3Jfc2hvcnQsICI1IikpICU+JSANCiAgcGNfcGxvdCgpICsNCg0KZWllICU+JQ0KICBmaWx0ZXIoc3RyX2RldGVjdChpbmRpY2F0b3Jfc2hvcnQsICI1IikpICU+JSANCiAgYmVuX3Bsb3QoKSArDQogIA0KcGxvdF9hbm5vdGF0aW9uKHRpdGxlID0gIjUuIEVkdWNhdG9ycyB0cmFpbmVkIGluIHJlc2lsaWVuY2UgZW5oYW5jaW5nIHByb2dyYW1tZXMiLCANCiAgICAgICAgICAgICAgICBzdWJ0aXRsZSA9ICJDb3VudGllcyB3aXRob3V0ICUgcmVhY2hlZCBoYXZlIG5vIHRhcmdldCIpDQoNCg0KYGBgDQoNCjxicj48YnI+PGJyPg0KDQojIyMgMi4yLjYgQ2hpbGRyZW4gYmVuZWZpdGVkIGZyb20gcmVzaWxpZW5jZSBlbmhhbmNpbmcgcHJvZ3JhbW1lcw0KDQo8YnI+DQoNCmBgYHtyfQ0Kc3VtbWFyeV90YWJsZSAlPiUgDQogIGZpbHRlcihzdHJfZGV0ZWN0KEluZGljYXRvciwgIjYiKSkgJT4lIA0KICBmbGV4dGFibGUoKSAlPiUgDQogIHNldF9jYXB0aW9uKHBhc3RlMCgiRWlFIEluZGljYXRvciA2LCBhcyBvZiAiLCBwYXJhbXMkcmVwb3J0X2RhdGUpKSAlPiUgDQogIHNldF90YWJsZV9wcm9wZXJ0aWVzKGxheW91dCA9ICJhdXRvZml0Iiwgd2lkdGggPSAuOTkpIA0KYGBgDQoNCjxicj4NCg0KYGBge3J9DQppbmRpY2F0b3JfbWFwKGVpZSwgIjYiLCBjb3VudHlfdGFyZ2V0KSArDQogIGxhYnModGl0bGUgPSAiVGFyZ2V0cyIsIA0KICAgICAgIGZpbGwgPSAiVGFyZ2V0IikgICsgDQppbmRpY2F0b3JfbWFwKGVpZSwgIjYiLCBiZW5lZmljaWFyaWVzKSArIA0KICBzY2FsZV9maWxsX3ZpcmlkaXMobGltaXRzID0gcmFuZ2UodGFyZ2V0c19yYW5nZSRpbmRpY2F0b3I2KSwgDQogICAgICAgICAgICAgICAgICAgICBsYWJlbHMgPSBjb21tYSwgDQogICAgICAgICAgICAgICAgICAgICBuYS52YWx1ZSA9ICJncmV5ODAiKSArIA0KICBsYWJzKHRpdGxlID0gIlRvdGFsIHJlYWNoZWQiLCANCiAgICAgICBmaWxsID0gIlJlYWNoZWQiKSArDQogIHBsb3RfYW5ub3RhdGlvbih0aXRsZSA9ICI2LiBDaGlsZHJlbiBiZW5lZml0ZWQgZnJvbSByZXNpbGllbmNlIGVuaGFuY2luZyBwcm9ncmFtbWVzLCB0YXJnZXQgYW5kIHJlYWNoZWQiLCANCiAgICAgICAgICAgICAgICAgIHN1YnRpdGxlID0gcGFzdGUwKCJBcyBvZiAiLCBwYXJhbXMkcmVwb3J0X2RhdGUpKSANCg0KYGBgDQoNCjxicj4NCg0KSW4gYHIgcGFyYW1zJHJlcG9ydF9tb250aGAgMjAyMywgYHIgZWllICU+JSBmaWx0ZXIobW9udGggJWluJSBwYXJhbXMkcmVwb3J0X21vbnRoICYgc3RyX2RldGVjdChpbmRpY2F0b3Jfc2hvcnQsICI2IikgJiBhY3Rpdml0eV9zdGF0dXMgPT0gIkNvbXBsZXRlZCIpICU+JSB7c3VtKC4kdG90YWxfcmVhY2hlZCwgbmEucm0gPSBUUlVFKX0gJT4lIGZvcm1hdChiaWcubWFyayA9ICIsIilgIHBlcnNvbnMgd2VyZSByZWFjaGVkIGJ5IGludGVydmVudGlvbnMgY29udHJpYnV0aW5nIHRvIHRoaXMgaW5kaWNhdG9yLCBvZiB3aGljaCBgciBlaWUgJT4lIGZpbHRlcihtb250aCAlaW4lIHBhcmFtcyRyZXBvcnRfbW9udGggJiBzdHJfZGV0ZWN0KGluZGljYXRvcl9zaG9ydCwgIjYiKSAmIGFjdGl2aXR5X3N0YXR1cyA9PSAiQ29tcGxldGVkIikgJT4lIHtzdW0oLiRib3lzLCBuYS5ybSA9IFRSVUUpfSAlPiUgZm9ybWF0KGJpZy5tYXJrID0gIiwiKWAgd2VyZSBib3lzIGFuZCBgciBlaWUgJT4lIGZpbHRlcihtb250aCAlaW4lIHBhcmFtcyRyZXBvcnRfbW9udGggJiBzdHJfZGV0ZWN0KGluZGljYXRvcl9zaG9ydCwgIjYiKSAmIGFjdGl2aXR5X3N0YXR1cyA9PSAiQ29tcGxldGVkIikgJT4lIHtzdW0oLiRnaXJscywgbmEucm0gPSBUUlVFKX0gJT4lIGZvcm1hdChiaWcubWFyayA9ICIsIilgIGFuZCB3ZXJlIGdpcmxzIA0KDQoNCjxicj4NCg0KYGBge3J9DQplaWUgJT4lIA0KICBmaWx0ZXIoc3RyX2RldGVjdChpbmRpY2F0b3Jfc2hvcnQsICI1IikpICU+JSANCiAgcGNfcGxvdCgpICsNCg0KZWllICU+JQ0KICBmaWx0ZXIoc3RyX2RldGVjdChpbmRpY2F0b3Jfc2hvcnQsICI1IikpICU+JSANCiAgYmVuX3Bsb3QoKSArDQogIA0KcGxvdF9hbm5vdGF0aW9uKHRpdGxlID0gIjYuIENoaWxkcmVuIGJlbmVmaXRlZCBmcm9tIHJlc2lsaWVuY2UgZW5oYW5jaW5nIHByb2dyYW1tZXMiLCANCiAgICAgICAgICAgICAgICBzdWJ0aXRsZSA9ICJDb3VudGllcyB3aXRob3V0ICUgcmVhY2hlZCBoYXZlIG5vIHRhcmdldCIpDQoNCg0KYGBgDQoNCg0KPGJyPjxicj48YnI+DQoNCiMgMy4gUGFydG5lcnMNCg0KIyMgMy4xIE9wZXJhdGlvbmFsIHByZXNlbmNlIG9mIGltcGxlbWVudGluZyBwYXJ0bmVycw0KDQo8YnI+DQoNCg0KDQpgYGB7ciB3YXJuaW5nPUZBTFNFLCBmaWcuaGVpZ2h0PTd9DQoNCnBhcnRuZXJfbWFwIDwtIGVpZSAlPiUgDQogIG11dGF0ZV9hdCh2YXJzKGJveXMsIGdpcmxzLCBtZW4sIHdvbWVuKSwgfiByZXBsYWNlX25hKC4sIDApKSAlPiUgDQogIGdyb3VwX2J5KGFkbTFfcGNvZGUsIGNvdW50eSkgJT4lIA0KICBzdW1tYXJpc2UocGFydG5lcnMgPSBuX2Rpc3RpbmN0KGltcGxlbWVudGluZ19wYXJ0bmVyKSwgDQogICAgICAgICAgICBsZWFkX29yZ2FuaXNhdGlvbiA9IG5fZGlzdGluY3QobGVhZF9vcmdhbmlzYXRpb24pLA0KICAgICAgICAgICAgYWN0aXZpdGllcyA9IG5fZGlzdGluY3QoaW5kaWNhdG9yX3Nob3J0KSwgDQogICAgICAgICAgICB3b21lbiA9IHN1bSh3b21lblthY3Rpdml0eV9zdGF0dXMgPT0gIkNvbXBsZXRlZCJdLCBuYS5ybSA9IFRSVUUpLA0KICAgICAgICAgICAgbWVuID0gc3VtKG1lblthY3Rpdml0eV9zdGF0dXMgPT0gIkNvbXBsZXRlZCJdLCBuYS5ybSA9IFRSVUUpLCANCiAgICAgICAgICAgIGJveXMgPSBzdW0oYm95c1thY3Rpdml0eV9zdGF0dXMgPT0gIkNvbXBsZXRlZCJdLCBuYS5ybSA9IFRSVUUpLCANCiAgICAgICAgICAgIGdpcmxzID0gc3VtKGdpcmxzW2FjdGl2aXR5X3N0YXR1cyA9PSAiQ29tcGxldGVkIl0sIG5hLnJtID0gVFJVRSksDQogICAgICAgICAgICB0b3RhbF9yZWFjaGVkID0gc3VtKHRvdGFsX3JlYWNoZWRbYWN0aXZpdHlfc3RhdHVzID09ICJDb21wbGV0ZWQiXSwgbmEucm0gPSBUUlVFKSwNCiAgICAgICAgICAgIC5ncm91cHMgPSAiZHJvcCIpICU+JSANCiAgbXV0YXRlKHJlYWNoZWQgPSBtZW4gKyB3b21lbiArIGJveXMgKyBnaXJscywgDQogICAgICAgICBtYWxlID0gbWVuICsgYm95cywgDQogICAgICAgICBmZW1hbGUgPSB3b21lbiArIGdpcmxzLCANCiAgICAgICAgIG1hbGVfcGMgPSByb3VuZChtYWxlIC8gcmVhY2hlZCAqIDEwMCksIA0KICAgICAgICAgZmVtYWxlX3BjID0gcm91bmQoZmVtYWxlIC8gcmVhY2hlZCAqIDEwMCkpICU+JSAgDQogIGxlZnRfam9pbihwYXJ0bmVyX2xpc3RfY291bnRpZXMgJT4lDQogICAgICAgICAgICAgIGRpc3RpbmN0KGFkbTFfcGNvZGUsIGFjcm9ueW0pICU+JQ0KICAgICAgICAgICAgICBncm91cF9ieShhZG0xX3Bjb2RlKSAlPiUNCiAgICAgICAgICAgICAgYXJyYW5nZShhY3JvbnltKSAlPiUgDQogICAgICAgICAgICAgIHN1bW1hcmlzZShhY3JvbnltID0gcGFzdGUwKGFjcm9ueW0sIGNvbGxhcHNlID0gIiwgIikpICU+JQ0KICAgICAgICAgICAgICBtdXRhdGUoYWNyb255bSA9IHN0cl9yZXBsYWNlX2FsbChhY3JvbnltLCAiQ2hpbGRGdW5kIiwgIkNGIiksIA0KICAgICAgICAgICAgICAgICAgICAgbl9wYXJ0bmVycyA9IHN0cl9jb3VudChhY3JvbnltLCAiLCIpICsgMSksIA0KICAgICAgICAgICAgYnkgPSAiYWRtMV9wY29kZSIpICU+JSANCiAgbGVmdF9qb2luKHBjb2RlMV9zaGFwZSwgDQogICAgICAgICAgICAgYnkgPSAiYWRtMV9wY29kZSIpICU+JSANCiAgc3RfYXNfc2YoKSAlPiUgDQogIGdncGxvdCgpICsgDQogIGdlb21fc2Yoc2l6ZSA9IC4wMSwgY29sb3VyID0gImdyZXk3MCIsIA0KICAgICAgICAgIGRhdGEgPSBwY29kZTFfc2hhcGUpICsgDQogIGdlb21fc2Yoc2l6ZSA9IC4wMSwgY29sb3VyID0gImdyZXk3MCIsIA0KICAgICAgICAgIGFlcyhmaWxsID0gcGFydG5lcnMsIA0KICAgICAgICAgICAgICBjb2xvdXIgPSBhZG0xX3Bjb2RlKSkgKyANCiAgZ2VvbV9zZl90ZXh0KGFlcyhsYWJlbCA9IHBhc3RlMCggDQogICAgY291bnR5LCAiXG4iLCBwYXJ0bmVycyksIA0KICAgICAgICAgICAgICAgICAgIHRleHQgPSBwYXN0ZTAoDQogICAgICAgICAgICAgICAgIkNvdW50eTogIiwgY291bnR5LCAiXG4iLCANCiAgICAgICAgICAgICAgICAiUGFydG5lcnM6ICIsIG5fcGFydG5lcnMsICJcbiIsIA0KICAgICAgICAgICAgICAgICJSZWFjaGVkOiAiLCBjb21tYSh0b3RhbF9yZWFjaGVkKSwgIlxuIiwgDQogICAgICAgICAgICAgICAgIkZlbWFsZV9yZWFjaGVkJTogIiwgZmVtYWxlX3BjLCAiJSwgIiwgIk1hbGVfcmVhY2hlZCU6ICIsIG1hbGVfcGMsICIlIiwgDQogICAgICAgICAgICAgICAgIlxuIiwgIA0KICAgICAgICAgICAgICAgIGFjcm9ueW0pKSwgDQogICAgICAgICAgICAgICAgc2l6ZSA9IDMsIGNvbG91ciA9ICJncmF5NDAiKSArIA0KICBzY2FsZV9maWxsX3ZpcmlkaXNfYyhvcHRpb24gPSAibWFrbyIsIA0KICAgICAgICAgICAgICAgICAgICAgZGlyZWN0aW9uID0gLTEsDQogICAgICAgICAgICAgICAgICAgICBicmVha3MgPSBjKDEsIDMsIDYsIDEwKSkgKyANCiAgDQogIHRoZW1lX3ZvaWQoKSArIA0KICAjIFJlbWVtYmVyIHRoYXQgeW91IG5lZWQgZ3VpZGVfY29sb3JiYXIsIG5vdCBndWlkZV9sZWdlbmQNCiAgIyBndWlkZXMoZmlsbCA9IGd1aWRlX2NvbG9yYmFyKHJldmVyc2UgPSBUUlVFKSkgKyANCiAgbGFicyh0aXRsZSA9ICJLRU5ZQTogRWR1Y2F0aW9uIGluIEVtZXJnZW5jaWVzIFdvcmtpbmcgR3JvdXAgb3BlcmF0aW9uYWwgcHJlc2VuY2UiLCANCiAgICAgICBzdWJ0aXRsZSA9IHBhc3RlMCgiYXMgb2YgIiwgcGFyYW1zJHJlcG9ydF9kYXRlKSwgDQogICAgICAgZmlsbCA9ICJQYXJ0bmVycyIpDQoNCg0KZ2dwbG90bHkocGFydG5lcl9tYXAsIHRvb2x0aXAgPSBjKCJ0ZXh0IikpICU+JSANCiAgbGF5b3V0KHRpdGxlID0gbGlzdCh0ZXh0ID0gcGFzdGUwKHN1bV9zdGF0cyRwYXJ0bmVycywgIiBFaUUgaW1wbGVtZW50aW5nIHBhcnRuZXJzIGFjcm9zcyAiLCBzdW1fc3RhdHMkY291bnRpZXMsICIgY291bnRpZXMiLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIjxicj4iLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIjxzdXA+IiwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJhcyBvZiAiLCBwYXJhbXMkcmVwb3J0X2RhdGUsICI7IG1vdXNlIG92ZXIgY291bnR5IG5hbWUgZm9yIG1vcmUgZGV0YWlscyIsICI8L3N1cD4iKSkpDQpgYGANCg0KDQo8YnI+DQoNCg0KQmVsb3cgaXMgYW4gaW50ZXJhY3RpdmUgdGFibGUgd2hpY2ggYWRkcyBkZXRhaWwgdG8gdGhlIG1hcCBhYm92ZSwgc2VydmluZyBhZGRpdGlvbmFsIGluZm9ybWF0aW9uIGZvciBjb29yZGluYXRpb24gLS0gYWxsb3dpbmcgaW50ZXJlc3RlZCBwYXJ0aWVzIHRvIHNlYXJjaCBieSBjb3VudHkgb3IgcGFydG5lci4gDQoNCiBUaGUgY29sdW1uIGAjQWN0aXZpdGllc2AgcmVmZXJzIHRvIHRoZSBudW1iZXIgb2YgRWR1Y2F0aW9uIGFjdGl2aXRpZXMgaW1wbGVtZW50ZWQgYnkgc2FpZCBwYXJ0bmVyIGluIGVhY2ggY291bnR5LiBFYWNoIGNvbHVtbiBjYW4gYmUgc29ydGVkIHdpdGggdGhlIGFycm93cyBuZXh0IHRvIGVhY2ggY29sdW1uIG5hbWUuIEVhY2ggY29sdW1uIGNhbiBhbHNvIGJlIGZpbHRlcmVkIGJ5IHR5cGluZyBpbnRvIHRoZSBzZWFyY2ggYmFyIGJlbG93IGVhY2ggY29sdW1uIG5hbWUuIE9ubHkgY29tcGxldGVkIGFjdGl2aXRpZXMgaGF2ZSBiZWVuIGluY2x1ZGVkLg0KIA0KYGBge3J9DQplaWUgJT4lDQogIG11dGF0ZV9hdCh2YXJzKGltcGxlbWVudGluZ19wYXJ0bmVyLCBsZWFkX29yZ2FuaXNhdGlvbiksIH4gDQogICAgICAgICAgICAgIHN0cl9zdWIoLiwgZW5kID0gNTBMKSkgJT4lICANCiAgZ3JvdXBfYnkoY291bnR5LCBhZG0xX3Bjb2RlLCBpbXBsZW1lbnRpbmdfcGFydG5lciwgbGVhZF9vcmdhbmlzYXRpb24pICU+JSANCiAgc3VtbWFyaXNlKHJlYWNoZWQgPSBzdW0odG90YWxfcmVhY2hlZFthY3Rpdml0eV9zdGF0dXMgPT0gIkNvbXBsZXRlZCJdLCBuYS5ybSA9IFRSVUUpLCANCiAgICAgICAgICAgIGFjdGl2aXRpZXMgPSBuX2Rpc3RpbmN0KGluZGljYXRvcl9zaG9ydCkpICU+JSANCiAgc2VsZWN0KGNvdW50eSwgaW1wbGVtZW50aW5nX3BhcnRuZXIsIGxlYWRfb3JnYW5pc2F0aW9uLCByZWFjaGVkLCBgI2FjdGl2aXRpZXNgID0gYWN0aXZpdGllcywgYWRtMV9wY29kZSkgJT4lIA0KICB3cml0ZV9jc3YoIi4vZGF0YS9icmVha2Rvd25fYnlfY291bnR5X3BhcnRuZXIuY3N2IikNCmBgYA0KIA0KDQpEb3dubG9hZCB0aGUgZGF0YXNldCBmcm9tIHRoZSB0YWJsZSBiZWxvdyBbaGVyZV0oaHR0cHM6Ly9naXRodWIuY29tL2tlbnlhLWVpZS13Zy9laWVfd2dfNXdzL2Jsb2IvbWFpbi9kYXRhL2JyZWFrZG93bl9ieV9jb3VudHlfcGFydG5lci5jc3YpLiANCg0KPGJyPg0KDQpgYGB7cn0NCmVpZSAlPiUNCiAgbXV0YXRlX2F0KHZhcnMoaW1wbGVtZW50aW5nX3BhcnRuZXIsIGxlYWRfb3JnYW5pc2F0aW9uKSwgfiANCiAgICAgICAgICAgICAgc3RyX3N1YiguLCBlbmQgPSA1MEwpKSAlPiUgIA0KICBncm91cF9ieShjb3VudHksIGFkbTFfcGNvZGUsIGltcGxlbWVudGluZ19wYXJ0bmVyLCBsZWFkX29yZ2FuaXNhdGlvbikgJT4lIA0KICBzdW1tYXJpc2UocmVhY2hlZCA9IHN1bSh0b3RhbF9yZWFjaGVkW2FjdGl2aXR5X3N0YXR1cyA9PSAiQ29tcGxldGVkIl0sIG5hLnJtID0gVFJVRSksIA0KICAgICAgICAgICAgYWN0aXZpdGllcyA9IG5fZGlzdGluY3QoaW5kaWNhdG9yX3Nob3J0KSkgJT4lIA0KICBsZWZ0X2pvaW4ocGFydG5lcl9saXN0X2NvdW50aWVzICU+JSANCiAgICAgICAgICAgICAgZGlzdGluY3QocGFydG5lciwgYWNyb255bSksIA0KICAgICAgICAgICAgYnkgPSBjKCJpbXBsZW1lbnRpbmdfcGFydG5lciIgPSAicGFydG5lciIpKSAlPiUgDQogIHNlbGVjdChjb3VudHksIGxlYWRfb3JnYW5pc2F0aW9uLCBpbXBsZW1lbnRpbmdfcGFydG5lciwgYWNyb255bSwgcmVhY2hlZCwgYCNhY3Rpdml0aWVzYCA9IGFjdGl2aXRpZXMsIGFkbTFfcGNvZGUpICU+JSANCiAgc2VsZWN0X2FsbCguLCB+IHN0cl90b190aXRsZSguKSkgJT4lIA0KICBkYXRhdGFibGUob3B0aW9ucyA9IGxpc3QocGFnZUxlbmd0aCA9IDEwLCBzY3JvbGxYID0gVFJVRSksIA0KICAgICAgICAgICAgZmlsdGVyID0gbGlzdChwb3NpdGlvbiA9ICJ0b3AiLCBjbGVhciA9IEZBTFNFKSwNCiAgICAgICAgICAgIGNhcHRpb24gPSBodG1sdG9vbHM6OnRhZ3MkY2FwdGlvbihzdHlsZSA9ICdjYXB0aW9uLXNpZGU6IHRvcDsgDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0ZXh0LWFsaWduOiBjZW50ZXI7IGZvbnQtc2l6ZToxMjAlIDsnLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIkJyZWFrZG93biBieSBjb3VudHkgYW5kIHBhcnRuZXIiKSkgJT4lIA0KICBmb3JtYXRTdHlsZSgwLCB0YXJnZXQgPSAicm93IiwgbGluZUhlaWdodCA9ICI4MCUiLCBmb250U2l6ZSA9ICI4MCUiKSAlPiUgDQogIGZvcm1hdEN1cnJlbmN5KGMoIlJlYWNoZWQiKSwgDQogICAgICAgICAgICAgICAgIGN1cnJlbmN5ID0gIiIsIGludGVydmFsID0gMywgbWFyayA9ICIsIikgJT4lIA0KICBmb3JtYXRSb3VuZChjKCJSZWFjaGVkIiksIGRpZ2l0cyA9IDApDQoNCmBgYA0KDQoNCjxicj48YnI+PGJyPg0KDQojIyAzLjIgU3VtbWFyeSBieSBpbXBsZW1lbnRpbmcgcGFydG5lcg0KDQoNClRoZSB0YWJsZSBiZWxvdyBicmVha3MgZG93biBwZXJzb25zIHJlYWNoZWQgYnkgcGFydG5lci4gDQoNCjxicj4NCg0KDQpgYGB7cn0NCmVpZSAlPiUgDQogIGZpbHRlcihhY3Rpdml0eV9zdGF0dXMgPT0gIkNvbXBsZXRlZCIpICU+JSANCiAgbXV0YXRlKGltcGxlbWVudGluZ19wYXJ0bmVyID0gc3RyX3N1YihpbXBsZW1lbnRpbmdfcGFydG5lciwgZW5kID0gNTBMKSkgJT4lIA0KICBncm91cF9ieShpbXBsZW1lbnRpbmdfcGFydG5lcikgJT4lIA0KICBzdW1tYXJpc2UocmVhY2hlZCA9IHN1bSh0b3RhbF9yZWFjaGVkLCBuYS5ybSA9IFRSVUUpLCANCiAgICAgICAgICAgIGNvdW50aWVzID0gbl9kaXN0aW5jdChhZG0xX3Bjb2RlKSwgDQogICAgICAgICAgICBhY3Rpdml0aWVzID0gbl9kaXN0aW5jdChpbmRpY2F0b3Jfc2hvcnQpKSAlPiUgDQogIGZpbHRlcihyZWFjaGVkID4gMCkgJT4lIA0KICBtdXRhdGUoYCV0b3RhbGAgPSByb3VuZChyZWFjaGVkIC8gc3VtKHJlYWNoZWQpICogMTAwLCBkaWdpdHMgPSAyKSkgJT4lIA0KICBhcnJhbmdlKGRlc2MocmVhY2hlZCkpICU+JSANCiAgZmxleHRhYmxlKCkgJT4lIA0KICB0aGVtZV96ZWJyYSgpICU+JSANCiAgc2V0X2NhcHRpb24oIlN1bW1hcnkgYnkgaW1wbGVtZW50aW5nIHBhcnRuZXIiKSAlPiUgDQogIHNldF90YWJsZV9wcm9wZXJ0aWVzKGxheW91dCA9ICJhdXRvZml0Iiwgd2lkdGggPSAuOSkgJT4lIA0KICBmb290bm90ZShpID0gMSwgaiA9IDIsIHJlZl9zeW1ib2xzID0gIjEiLCBwYXJ0ID0gImhlYWRlciIsDQogICAgICAgICAgIGFzX3BhcmFncmFwaCgiQWxsIGluZGljYXRvcnMgYXMgb3Bwb3NlZCBvbmx5IGluZGljYXRvcnMgMSwgMiwgNSBhbmQgNiIpKSAlPiUgDQogIGZvb3Rub3RlKGkgPSAxLCBqID0gNSwgcmVmX3N5bWJvbHMgPSAiMiIsIHBhcnQgPSAiaGVhZGVyIiwNCiAgICAgICAgICAgYXNfcGFyYWdyYXBoKCJQZXJjZW50YWdlIG9mIHJlYWNoZWQgZm9yIGFsbCBpbmRpY2F0b3JzIikpDQoNCg0KYGBgDQoNCg0KPGJyPjxicj48YnI+DQoNCg0KIyA0LiBTY2hvb2xzIGFuZCBlZHVjYXRpb24gbGV2ZWwNCg0KIyMgNC4xIFNjaG9vbHMNCg0KVGhlIG51bWJlciBvZiBzY2hvb2xzIHJlYWNoZWQgYnkgc2Nob29sIGZlZWRpbmcgcHJvZ3JhbW1lcyBhbmQgV0FTSCBpbiBzY2hvb2xzIGludGVydmVudGlvbnMgdG8tZGF0ZSBhcmU6IA0KDQo8YnI+DQoNCmBgYHtyfQ0KZWllICU+JSANCiAgZmlsdGVyKGFjdGl2aXR5X3N0YXR1cyA9PSAiQ29tcGxldGVkIikgJT4lIA0KICBmaWx0ZXIoIWlzLm5hKG51bWJlcl9zY2hvb2xzKSkgJT4lDQogIG11dGF0ZShkYXRlID0gbmFtZV90b19kYXRlKG1vbnRoKSkgJT4lIA0KICBmaWx0ZXIoc3RyX2RldGVjdChpbmRpY2F0b3Jfc2hvcnQsICIyfDQiKSkgJT4lDQogIGdyb3VwX2J5KGluZGljYXRvcl9zaG9ydCwgZGF0ZSkgJT4lIA0KICBzdW1tYXJpc2Uoc2Nob29scyA9IHN1bShudW1iZXJfc2Nob29scyksIA0KICAgICAgICAgICAgcmVhY2hlZCA9IHN1bSh0b3RhbF9yZWFjaGVkKSkgJT4lIA0KICBhcnJhbmdlKGRhdGUpICU+JSANCiAgbXV0YXRlKGN1bV9zY2hvb2xzID0gY3Vtc3VtKHNjaG9vbHMpKSAlPiUgDQogIGFycmFuZ2UoaW5kaWNhdG9yX3Nob3J0KSAlPiUgDQogIGdncGxvdChhZXMoeCA9IGRhdGUsIHkgPSBjdW1fc2Nob29scyksIA0KICAgICAgICAgdmp1c3QgPSAtLjUpICsgDQogIHNjYWxlX3hfZGF0ZShkYXRlX2JyZWFrcyA9ICIxIG1vbnRoIiwgZGF0ZV9sYWJlbHMgPSAiJWIiKSArIA0KICBnZW9tX2xpbmUoc2l6ZSA9IDEuNywgDQogICAgICAgICAgICBhZXMoY29sb3VyID0gaW5kaWNhdG9yX3Nob3J0KSkgKyANCiAgZ2VvbV90ZXh0KGFlcyhsYWJlbCA9IGNvbW1hKGN1bV9zY2hvb2xzKSksIHZqdXN0ID0gLS41KSArDQogIHNjYWxlX2NvbG91cl9tYW51YWwodmFsdWVzID0gYygiIzMxNjg4ZSIsICIjZDg1NzZiIikpICsNCiAgdGhlbWUobGVnZW5kLnBvc2l0aW9uID0gImJvdHRvbSIpICsgDQogIGxhYnMoeCA9ICIiLCANCiAgICAgICB5ID0gIkN1bXVsYXRpdmUgbnVtYmVyIG9mIHNjaG9vbHMgcmVhY2hlZCIsIA0KICAgICAgIHRpdGxlID0gIlNjaG9vbHMgcmVhY2hlZCBieSBmZWVkaW5nIHByb2dyYW1tZXMgYW5kIFdBU0ggaW4gc2Nob29scyIsIA0KICAgICAgIGNvbG91ciA9ICJJbmRpY2F0b3IiKQ0KDQoNCmBgYA0KDQo8YnI+DQoNCkhvd2V2ZXIsIHJlcG9ydGluZyB0aGUgb3ZlcmFsbCBudW1iZXIgb2Ygc2Nob29scyByZWFjaGVkIGJ5IGFsbCBFaUUgaW50ZXJ2ZW50aW9ucyBpcyBtdWNoIG1vcmUgY2hhbGxlbmdpbmcuDQoNCldoaWxzdCBhbGwgcGFydG5lcnMgd29ya2luZyBvbiBpbmRpY2F0b3JzIDIgYW5kIDQgc3VibWl0dGVkIHRoZSBudW1iZXIgb2Ygc2Nob29scyB0aGV5IHdlcmUgd29ya2luZyBpbiwgdGhlIHNhbWUgaXMgbm90IHRydWUgZm9yIHRoZSBvdGhlciBpbmRpY2F0b3JzLiBPbmx5IGluZGljYXRvcnMgMiBhbmQgNCByZXF1aXJlIHRoZSByZXBvcnRpbmcgb2YgdGhlIG51bWJlciBvZiBzY2hvb2xzLiANCg0KDQo8YnI+PGJyPjxicj4NCg0KDQoNCg0KDQoNCiMgNS4gUmVmZXJlbmNlIG1hcHMgYW5kIHRhYmxlcyANCg0KIyMgNS4xIFJlZmVyZW5jZSBtYXBzIA0KDQpJUEMgZGF0YSBleHRyYWN0ZWQgZnJvbSBbaGVyZV0oaHR0cHM6Ly93d3cuaXBjaW5mby5vcmcvaXBjLWNvdW50cnktYW5hbHlzaXMvZGV0YWlscy1tYXAvZW4vYy8xMTU2NTQxLz9pc28zPUtFTikuIA0KDQpgYGB7ciBmaWcud2lkdGg9MTIsIGZpZy5oZWlnaHQ9MTB9DQppcGMgJT4lIA0KICByaWdodF9qb2luKHBjb2RlMV9zaGFwZSwgDQogICAgICAgICAgICAgYnkgPSAiYWRtMV9wY29kZSIpICU+JSANCiAgc3RfYXNfc2YoKSAlPiUgDQogIGdncGxvdCgpICsgDQogIGdlb21fc2Yoc2l6ZSA9IC4wMSwgY29sb3VyID0gImdyZXk3MCIsIA0KICAgICAgICAgIGFlcyhmaWxsID0gbnVtYmVyX3BoYXNlX3AzKSkgKyANCiAgZ2VvbV9zZl90ZXh0KGFlcyhsYWJlbCA9IGNvbW1hKG51bWJlcl9waGFzZV9wMykpLCANCiAgICAgICAgICAgICAgIGNvbG91ciA9ICJncmV5NDUiLCANCiAgICAgICAgICAgICAgIHNpemUgPSAyKSArIA0KICBzY2FsZV9maWxsX3ZpcmlkaXNfYyhsYWJlbHMgPSBjb21tYSwgDQogICAgICAgICAgICAgICAgICAgICAgIG5hLnZhbHVlID0gImdyZXk4MCIsIA0KICAgICAgICAgICAgICAgICAgICAgICBvcHRpb24gPSAiaW5mZXJubyIsIGJlZ2luID0gLjQsICwgZGlyZWN0aW9uID0gLTEpICsgDQogIHRoZW1lX3ZvaWQoKSArIA0KICBsYWJzKGZpbGwgPSAiQXQgbGVhc3RcbnBoYXNlIDMiLCANCiAgICAgICB0aXRsZSA9ICJOdW1iZXIgb2YgcGVyc29ucyBJUEMgUGhhc2UgMyBvciBhYm92ZSIsIA0KICAgICAgIHN1YnRpdGxlID0gIlNvdXJjZTogaHR0cHM6Ly93d3cuaXBjaW5mby5vcmcvIikgKyANCg0KaXBjICU+JSANCiAgcmlnaHRfam9pbihwY29kZTFfc2hhcGUsIA0KICAgICAgICAgICAgIGJ5ID0gImFkbTFfcGNvZGUiKSAlPiUgDQogIHN0X2FzX3NmKCkgJT4lIA0KICBnZ3Bsb3QoKSArIA0KICBnZW9tX3NmKHNpemUgPSAuMDEsIGNvbG91ciA9ICJncmV5NzAiLCANCiAgICAgICAgICBhZXMoZmlsbCA9IHBlcmNlbnRfcGhhc2VfcDMpKSArIA0KICBnZW9tX3NmX3RleHQoYWVzKGxhYmVsID0gcGVyY2VudChwZXJjZW50X3BoYXNlX3AzKSksIA0KICAgICAgICAgICAgICAgY29sb3VyID0gImdyZXk0NSIsIA0KICAgICAgICAgICAgICAgc2l6ZSA9IDIpICsgDQogIHNjYWxlX2ZpbGxfdmlyaWRpc19jKGxhYmVscyA9IHBlcmNlbnQsIA0KICAgICAgICAgICAgICAgICAgICAgICBuYS52YWx1ZSA9ICJncmV5ODAiLCANCiAgICAgICAgICAgICAgICAgICAgICAgb3B0aW9uID0gImluZmVybm8iLCBiZWdpbiA9IC40LCAsIGRpcmVjdGlvbiA9IC0xKSArIA0KICB0aGVtZV92b2lkKCkgKyANCiAgbGFicyhmaWxsID0gIiUgSVBDIHBoYXNlIDMiLCANCiAgICAgICB0aXRsZSA9ICJQZXJjZW50YWdlIG9mIHBvcHVsYXRpb24gSVBDIFBoYXNlIDMgb3IgYWJvdmUiLCANCiAgICAgICBzdWJ0aXRsZSA9ICJTb3VyY2U6IGh0dHBzOi8vd3d3LmlwY2luZm8ub3JnLyIpICsNCg0KDQplaWUgJT4lIA0KICBmaWx0ZXIoYWN0aXZpdHlfc3RhdHVzID09ICJDb21wbGV0ZWQiKSAlPiUgDQogIGdyb3VwX2J5KGFkbTFfcGNvZGUpICU+JSANCiAgc3VtbWFyaXNlKHNlY3Rvcl9yZWFjaGVkID0gc3VtKHNlY3Rvcl9yZWFjaGVkLCBuYS5ybSA9IFRSVUUpKSAlPiUgDQogIGZpbHRlcihzZWN0b3JfcmVhY2hlZCA+IDApICU+JSANCiAgcmlnaHRfam9pbihwY29kZTFfc2hhcGUsIA0KICAgICAgICAgICAgIGJ5ID0gImFkbTFfcGNvZGUiKSAlPiUgDQogIHN0X2FzX3NmKCkgJT4lIA0KICBnZ3Bsb3QoKSArIA0KICBnZW9tX3NmKHNpemUgPSAuMDEsIGNvbG91ciA9ICJncmV5NzAiLCANCiAgICAgICAgICBhZXMoZmlsbCA9IHNlY3Rvcl9yZWFjaGVkKSkgKyANCiAgZ2VvbV9zZl90ZXh0KGFlcyhsYWJlbCA9IGNvbW1hKHNlY3Rvcl9yZWFjaGVkKSksIA0KICAgICAgICAgICAgICAgY29sb3VyID0gImdyZXk0NSIsIA0KICAgICAgICAgICAgICAgc2l6ZSA9IDIpICsgDQogIHNjYWxlX2ZpbGxfdmlyaWRpcyhsYWJlbHMgPSBjb21tYSwgDQogICAgICAgICAgICAgICAgICAgICAgIG5hLnZhbHVlID0gImdyZXk4MCIsIA0KICAgICAgICAgICAgICAgICAgICAgb3B0aW9uID0gIm1ha28iLCANCiAgICAgICAgICAgICAgICAgICAgIGRpcmVjdGlvbiA9IC0xLCANCiAgICAgICAgICAgICAgICAgICAgIGJlZ2luID0gLjIsDQogICAgICAgICAgICAgICAgICAgICB0cmFucyA9ICJsb2ciLCANCiAgICAgICAgICAgICAgICAgICAgIGJyZWFrcyA9IGMoMCwgMTAwLCAxMDAwLCAxMDAwMCwgMTAwMDAwLCAzMzk0ODMpKSArIA0KICB0aGVtZV92b2lkKCkgKyANCiAgbGFicyhmaWxsID0gIlNlY3RvclxucmVhY2hlZCIsIA0KICAgICAgIHRpdGxlID0gIlBlcnNvbnMgcmVhY2hlZCBieSB0aGUgRWR1Y2F0aW9uIFNlY3RvciIpICsgDQogIA0KZWllICU+JSANCiAgZmlsdGVyKGFjdGl2aXR5X3N0YXR1cyA9PSAiQ29tcGxldGVkIikgJT4lIA0KICBncm91cF9ieShhZG0xX3Bjb2RlKSAlPiUgDQogIHN1bW1hcmlzZShyZWFjaGVkID0gc3VtKHNlY3Rvcl9yZWFjaGVkLCBuYS5ybSA9IFRSVUUpKSAlPiUgDQogIGZ1bGxfam9pbih0YXJnZXRzICU+JSANCiAgICAgICAgICAgICAgZmlsdGVyKHRhcmdldF91bml0ID09ICJwZW9wbGUiKSAlPiUNCiAgICAgICAgICAgICAgZGlzdGluY3QoYWRtMV9wY29kZSwgdGFyZ2V0ID0gY291bnR5X292ZXJhbGxfdGFyZ2V0KSkgJT4lIA0KICByZXBsYWNlX25hKGxpc3QocmVhY2hlZCA9IDAsIHRhcmdldCA9IDApKSAlPiUgDQogIG11dGF0ZShwYyA9IGlmZWxzZSh0YXJnZXQgPT0gMCwgMCwgcmVhY2hlZCAvIHRhcmdldCkpICU+JSANCiAgcmlnaHRfam9pbihwY29kZTFfc2hhcGUsIA0KICAgICAgICAgICAgIGJ5ID0gImFkbTFfcGNvZGUiKSAlPiUgDQogIHN0X2FzX3NmKCkgJT4lIA0KICBnZ3Bsb3QoKSArDQogIGdlb21fc2Yoc2l6ZSA9IC4wMSwgY29sb3VyID0gImdyZXk3MCIsIA0KICAgICAgICAgIGFlcyhmaWxsID0gcGMpKSArIA0KICBnZW9tX3NmX3RleHQoYWVzKGxhYmVsID0gcGVyY2VudChwYywgYWNjdXJhY3kgPSAxKSksIA0KICAgICAgICAgICAgICAgY29sb3VyID0gImdyZXk0NSIsIA0KICAgICAgICAgICAgICAgc2l6ZSA9IDIpICsgDQogIHNjYWxlX2ZpbGxfdmlyaWRpcyhsYWJlbHMgPSBwZXJjZW50LCANCiAgICAgICAgICAgICAgICAgICAgICAgbmEudmFsdWUgPSAiZ3JleTgwIiwNCiAgICAgICAgICAgICAgICAgICAgIG9wdGlvbiA9ICJtYWtvIiwgDQogICAgICAgICAgICAgICAgICAgICBkaXJlY3Rpb24gPSAtMSwNCiAgICAgICAgICAgICAgICAgICAgIGJlZ2luID0gLjIpICsgDQogIHRoZW1lX3ZvaWQoKSArIA0KICBsYWJzKGZpbGwgPSAiJSBvZiB0YXJnZXQiLCANCiAgICAgICB0aXRsZSA9ICJQZXJjZW50YWdlIG9mIEVpRSBjb3VudHkgdGFyZ2V0IHJlYWNoZWQiKSArICAgDQoNCnBsb3RfbGF5b3V0KG5jb2wgPSAyLCANCiAgICAgICAgICAgIG5yb3cgPSAyKQ0KICANCmBgYA0KDQo8YnI+PGJyPjxicj4NCg0KDQojIyA1LjIgUmVmZXJlbmNlIHRhYmxlIA0KDQpEb3dubG9hZCB0aGUgRWlFIDVXcyBkYXRhIFtoZXJlXShodHRwczovL2dpdGh1Yi5jb20va2VueWEtZWllLXdnL2VpZV93Z181d3MvYmxvYi9tYWluL2RhdGEvZWllXzV3cy5jc3YpDQoNCkFzIGEgcmVmcmVzaGVyIGZvciB0aGUgcmVmZXJlbmNlIHRhYmxlIGJlbG93LCB0aGUgaW5kaWNhdG9ycyBhcmU6IA0KDQo8YnI+DQoNCmBgYHtyfQ0KZWllICU+JSANCiAgZGlzdGluY3QoaW5kaWNhdG9yKSAlPiUgDQogIGFycmFuZ2UoaW5kaWNhdG9yKSAlPiUgDQogIGZsZXh0YWJsZSgpICU+JSANCiAgdGhlbWVfemVicmEoKSAlPiUgDQogIHNldF90YWJsZV9wcm9wZXJ0aWVzKHdpZHRoID0gLjg1LCBsYXlvdXQgPSAiYXV0b2ZpdCIpICU+JSANCiAgZm9udHNpemUoaSA9IDE6NiwgaiA9IDEsIHNpemUgPSA5KSANCg0KYGBgDQoNCjxicj4NCg0KDQpgYGB7cn0NCmVpZSAlPiUNCiAgbXV0YXRlKGltcGxlbWVudGluZ19wYXJ0bmVyID0gc3RyX3N1YihpbXBsZW1lbnRpbmdfcGFydG5lciwgZW5kID0gNTBMKSwgDQogICAgICAgICBpbmRpY2F0b3JfbnVtYmVyID0gcGFyc2VfbnVtYmVyKGluZGljYXRvcl9zaG9ydCkpICU+JQ0KICBncm91cF9ieShjb3VudHksIGFkbTFfcGNvZGUsIGltcGxlbWVudGluZ19wYXJ0bmVyLCBpbmRpY2F0b3JfbnVtYmVyKSAlPiUgDQogIHN1bW1hcmlzZShyZWFjaGVkID0gc3VtKHRvdGFsX3JlYWNoZWQsIG5hLnJtID0gVFJVRSkpICU+JSANCiAgc2VsZWN0KGNvdW50eSwgaW1wbGVtZW50aW5nX3BhcnRuZXIsIGluZGljYXRvciA9IGluZGljYXRvcl9udW1iZXIsIHJlYWNoZWQsIGFkbTFfcGNvZGUpICU+JSANCiAgZGF0YXRhYmxlKG9wdGlvbnMgPSBsaXN0KHBhZ2VMZW5ndGggPSAxMCwgc2Nyb2xsWCA9IFRSVUUpLCANCiAgICAgICAgICAgIGZpbHRlciA9IGxpc3QocG9zaXRpb24gPSAidG9wIiwgY2xlYXIgPSBGQUxTRSksDQogICAgICAgICAgICBjYXB0aW9uID0gaHRtbHRvb2xzOjp0YWdzJGNhcHRpb24oc3R5bGUgPSAnY2FwdGlvbi1zaWRlOiB0b3A7IA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGV4dC1hbGlnbjogY2VudGVyOyBmb250LXNpemU6MTIwJSA7JywNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJCcmVha2Rvd24gYnkgaW5kaWNhdG9yLCBjb3VudHkgYW5kIGltcGxlbWVudGluZyBwYXJ0bmVyIikpICU+JSANCiAgZm9ybWF0U3R5bGUoMCwgdGFyZ2V0ID0gInJvdyIsIGxpbmVIZWlnaHQgPSAiODAlIiwgZm9udFNpemUgPSAiODAlIikgJT4lIA0KICBmb3JtYXRDdXJyZW5jeShjKCJyZWFjaGVkIiksIA0KICAgICAgICAgICAgICAgICBjdXJyZW5jeSA9ICIiLCBpbnRlcnZhbCA9IDMsIG1hcmsgPSAiLCIpICU+JSANCiAgZm9ybWF0Um91bmQoYygicmVhY2hlZCIpLCBkaWdpdHMgPSAwKQ0KYGBgDQoNCjxicj48YnI+PGJyPg0KDQoNCg0KDQoNCg0KDQoNCg0KDQo=